move sql helpers to the other package, all fields in all inputs are now pointers, add a new model - QualificationToProfession
This commit is contained in:
parent
d7c208c6f5
commit
5fe94741ce
|
@ -1,3 +1,4 @@
|
|||
#!/bin/sh
|
||||
cd ./internal/graphql
|
||||
go run github.com/99designs/gqlgen
|
||||
go mod tidy
|
|
@ -1,59 +1,9 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func addAliasToColumnName(column, prefix string) string {
|
||||
if prefix != "" && !strings.HasPrefix(column, prefix+".") {
|
||||
column = wrapStringInDoubleQuotes(prefix) + "." + wrapStringInDoubleQuotes(column)
|
||||
} else {
|
||||
column = wrapStringInDoubleQuotes(column)
|
||||
}
|
||||
return column
|
||||
}
|
||||
|
||||
func wrapStringInDoubleQuotes(str string) string {
|
||||
return `"` + str + `"`
|
||||
}
|
||||
|
||||
func buildConditionEquals(column string) string {
|
||||
return column + " = ?"
|
||||
}
|
||||
|
||||
func buildConditionLT(column string) string {
|
||||
return column + " < ?"
|
||||
}
|
||||
|
||||
func buildConditionLTE(column string) string {
|
||||
return column + " <= ?"
|
||||
}
|
||||
|
||||
func buildConditionGT(column string) string {
|
||||
return column + " > ?"
|
||||
}
|
||||
|
||||
func buildConditionGTE(column string) string {
|
||||
return column + " >= ?"
|
||||
}
|
||||
|
||||
func buildConditionMatch(column string) string {
|
||||
return column + " LIKE ?"
|
||||
}
|
||||
|
||||
func buildConditionIEQ(column string) string {
|
||||
return column + " ILIKE ?"
|
||||
}
|
||||
|
||||
func buildConditionArray(column string) string {
|
||||
return column + " = ANY(?)"
|
||||
}
|
||||
|
||||
func buildConditionNotInArray(column string) string {
|
||||
return "NOT (" + buildConditionArray(column) + ")"
|
||||
}
|
||||
|
||||
func isZero(v interface{}) bool {
|
||||
switch c := v.(type) {
|
||||
case string:
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/go-pg/pg/v10"
|
||||
"github.com/go-pg/pg/v10/orm"
|
||||
"github.com/gosimple/slug"
|
||||
sqlutils "github.com/zdam-egzamin-zawodowy/backend/pkg/utils/sql"
|
||||
)
|
||||
|
||||
type Profession struct {
|
||||
|
@ -35,8 +36,19 @@ func (p *Profession) BeforeUpdate(ctx context.Context) (context.Context, error)
|
|||
}
|
||||
|
||||
type ProfessionInput struct {
|
||||
Name string `json:"name,omitempty" xml:"name" gqlgen:"name"`
|
||||
Description string `json:"description,omitempty" xml:"description" gqlgen:"description"`
|
||||
Name *string `json:"name,omitempty" xml:"name" gqlgen:"name"`
|
||||
Description *string `json:"description,omitempty" xml:"description" gqlgen:"description"`
|
||||
}
|
||||
|
||||
func (input *ProfessionInput) ToProfession() *Profession {
|
||||
p := &Profession{}
|
||||
if input.Name != nil {
|
||||
p.Name = *input.Name
|
||||
}
|
||||
if input.Description != nil {
|
||||
p.Description = *input.Description
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
type ProfessionFilter struct {
|
||||
|
@ -63,53 +75,53 @@ type ProfessionFilter struct {
|
|||
|
||||
func (f *ProfessionFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
|
||||
if !isZero(f.ID) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("id", alias)), pg.Array(f.ID))
|
||||
}
|
||||
if !isZero(f.IDNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("id", alias)), pg.Array(f.IDNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ))
|
||||
}
|
||||
|
||||
if !isZero(f.Slug) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("slug", alias)), pg.Array(f.Slug))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("slug", alias)), pg.Array(f.Slug))
|
||||
}
|
||||
if !isZero(f.SlugNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("slug", alias)), pg.Array(f.SlugNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("slug", alias)), pg.Array(f.SlugNEQ))
|
||||
}
|
||||
|
||||
if !isZero(f.Name) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("name", alias)), pg.Array(f.Name))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("name", alias)), pg.Array(f.Name))
|
||||
}
|
||||
if !isZero(f.NameNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("name", alias)), pg.Array(f.NameNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ))
|
||||
}
|
||||
if !isZero(f.NameMATCH) {
|
||||
q = q.Where(buildConditionMatch(addAliasToColumnName("name", alias)), f.NameMATCH)
|
||||
q = q.Where(sqlutils.BuildConditionMatch(sqlutils.AddAliasToColumnName("name", alias)), f.NameMATCH)
|
||||
}
|
||||
if !isZero(f.NameIEQ) {
|
||||
q = q.Where(buildConditionIEQ(addAliasToColumnName("name", alias)), f.NameIEQ)
|
||||
q = q.Where(sqlutils.BuildConditionIEQ(sqlutils.AddAliasToColumnName("name", alias)), f.NameIEQ)
|
||||
}
|
||||
|
||||
if !isZero(f.DescriptionMATCH) {
|
||||
q = q.Where(buildConditionMatch(addAliasToColumnName("description", alias)), f.DescriptionMATCH)
|
||||
q = q.Where(sqlutils.BuildConditionMatch(sqlutils.AddAliasToColumnName("description", alias)), f.DescriptionMATCH)
|
||||
}
|
||||
if !isZero(f.DescriptionIEQ) {
|
||||
q = q.Where(buildConditionIEQ(addAliasToColumnName("description", alias)), f.DescriptionIEQ)
|
||||
q = q.Where(sqlutils.BuildConditionIEQ(sqlutils.AddAliasToColumnName("description", alias)), f.DescriptionIEQ)
|
||||
}
|
||||
|
||||
if !isZero(f.CreatedAt) {
|
||||
q = q.Where(buildConditionEquals(addAliasToColumnName("created_at", alias)), f.CreatedAt)
|
||||
q = q.Where(sqlutils.BuildConditionEquals(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAt)
|
||||
}
|
||||
if !isZero(f.CreatedAtGT) {
|
||||
q = q.Where(buildConditionGT(addAliasToColumnName("created_at", alias)), f.CreatedAtGT)
|
||||
q = q.Where(sqlutils.BuildConditionGT(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT)
|
||||
}
|
||||
if !isZero(f.CreatedAtGTE) {
|
||||
q = q.Where(buildConditionGTE(addAliasToColumnName("created_at", alias)), f.CreatedAtGTE)
|
||||
q = q.Where(sqlutils.BuildConditionGTE(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE)
|
||||
}
|
||||
if !isZero(f.CreatedAtLT) {
|
||||
q = q.Where(buildConditionLT(addAliasToColumnName("created_at", alias)), f.CreatedAtLT)
|
||||
q = q.Where(sqlutils.BuildConditionLT(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT)
|
||||
}
|
||||
if !isZero(f.CreatedAtLTE) {
|
||||
q = q.Where(buildConditionLTE(addAliasToColumnName("created_at", alias)), f.CreatedAtLTE)
|
||||
q = q.Where(sqlutils.BuildConditionLTE(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
|
|
@ -31,3 +31,15 @@ func (q *Qualification) BeforeUpdate(ctx context.Context) (context.Context, erro
|
|||
|
||||
return ctx, nil
|
||||
}
|
||||
|
||||
type QualificationToProfession struct {
|
||||
QualificationID int `json:"qualificationID" xml:"qualificationID" gqlgen:"qualificationID"`
|
||||
ProfessionID int `json:"professionID" xml:"professionID" gqlgen:"professionID"`
|
||||
}
|
||||
|
||||
type QualificationInput struct {
|
||||
Name string
|
||||
Description string
|
||||
Code string
|
||||
Formula string
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"context"
|
||||
"time"
|
||||
|
||||
sqlutils "github.com/zdam-egzamin-zawodowy/backend/pkg/utils/sql"
|
||||
|
||||
"github.com/go-pg/pg/v10"
|
||||
"github.com/go-pg/pg/v10/orm"
|
||||
"github.com/gosimple/slug"
|
||||
|
@ -53,21 +55,6 @@ func (u *User) BeforeUpdate(ctx context.Context) (context.Context, error) {
|
|||
return ctx, nil
|
||||
}
|
||||
|
||||
func (u *User) MergeInput(input *UserInput) {
|
||||
if input.DisplayName != "" {
|
||||
u.DisplayName = input.DisplayName
|
||||
}
|
||||
if input.Password != "" {
|
||||
u.Password = input.Password
|
||||
}
|
||||
if input.Role.IsValid() {
|
||||
u.Role = input.Role
|
||||
}
|
||||
if input.Activated != nil {
|
||||
u.Activated = input.Activated
|
||||
}
|
||||
}
|
||||
|
||||
func (u *User) CompareHashAndPassword(password string) error {
|
||||
if password == u.Password {
|
||||
return nil
|
||||
|
@ -79,21 +66,30 @@ func (u *User) CompareHashAndPassword(password string) error {
|
|||
}
|
||||
|
||||
type UserInput struct {
|
||||
DisplayName string `json:"displayName" xml:"displayName" gqlgen:"displayName"`
|
||||
Password string `json:"password" xml:"password" gqlgen:"password"`
|
||||
Email string `json:"email" xml:"email" gqlgen:"email"`
|
||||
Role Role `json:"role" xml:"role" gqlgen:"role"`
|
||||
DisplayName *string `json:"displayName" xml:"displayName" gqlgen:"displayName"`
|
||||
Password *string `json:"password" xml:"password" gqlgen:"password"`
|
||||
Email *string `json:"email" xml:"email" gqlgen:"email"`
|
||||
Role *Role `json:"role" xml:"role" gqlgen:"role"`
|
||||
Activated *bool `json:"activated" xml:"activated" gqlgen:"activated"`
|
||||
}
|
||||
|
||||
func (input *UserInput) ToUser() *User {
|
||||
return &User{
|
||||
DisplayName: input.DisplayName,
|
||||
Password: input.Password,
|
||||
Email: input.Email,
|
||||
Role: input.Role,
|
||||
u := &User{
|
||||
Activated: input.Activated,
|
||||
}
|
||||
if input.DisplayName != nil {
|
||||
u.DisplayName = *input.DisplayName
|
||||
}
|
||||
if input.Password != nil {
|
||||
u.Password = *input.Password
|
||||
}
|
||||
if input.Email != nil {
|
||||
u.Email = *input.Email
|
||||
}
|
||||
if input.Role != nil {
|
||||
u.Role = *input.Role
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
type UserFilter struct {
|
||||
|
@ -127,63 +123,63 @@ type UserFilter struct {
|
|||
|
||||
func (f *UserFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
|
||||
if !isZero(f.ID) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("id", alias)), pg.Array(f.ID))
|
||||
}
|
||||
if !isZero(f.IDNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("id", alias)), pg.Array(f.IDNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ))
|
||||
}
|
||||
|
||||
if !isZero(f.Slug) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("slug", alias)), pg.Array(f.Slug))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("slug", alias)), pg.Array(f.Slug))
|
||||
}
|
||||
if !isZero(f.SlugNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("slug", alias)), pg.Array(f.SlugNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("slug", alias)), pg.Array(f.SlugNEQ))
|
||||
}
|
||||
|
||||
if !isZero(f.Activated) {
|
||||
q = q.Where(buildConditionEquals(addAliasToColumnName("activated", alias)), f.Activated)
|
||||
q = q.Where(sqlutils.BuildConditionEquals(sqlutils.AddAliasToColumnName("activated", alias)), f.Activated)
|
||||
}
|
||||
|
||||
if !isZero(f.DisplayName) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("display_name", alias)), pg.Array(f.DisplayName))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("display_name", alias)), pg.Array(f.DisplayName))
|
||||
}
|
||||
if !isZero(f.DisplayNameNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("display_name", alias)), pg.Array(f.DisplayNameNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("display_name", alias)), pg.Array(f.DisplayNameNEQ))
|
||||
}
|
||||
if !isZero(f.DisplayNameMATCH) {
|
||||
q = q.Where(buildConditionMatch(addAliasToColumnName("display_name", alias)), f.DisplayNameMATCH)
|
||||
q = q.Where(sqlutils.BuildConditionMatch(sqlutils.AddAliasToColumnName("display_name", alias)), f.DisplayNameMATCH)
|
||||
}
|
||||
if !isZero(f.DisplayNameIEQ) {
|
||||
q = q.Where(buildConditionIEQ(addAliasToColumnName("display_name", alias)), f.DisplayNameIEQ)
|
||||
q = q.Where(sqlutils.BuildConditionIEQ(sqlutils.AddAliasToColumnName("display_name", alias)), f.DisplayNameIEQ)
|
||||
}
|
||||
|
||||
if !isZero(f.Email) {
|
||||
q = q.Where(buildConditionArray(addAliasToColumnName("email", alias)), pg.Array(f.Email))
|
||||
q = q.Where(sqlutils.BuildConditionArray(sqlutils.AddAliasToColumnName("email", alias)), pg.Array(f.Email))
|
||||
}
|
||||
if !isZero(f.EmailNEQ) {
|
||||
q = q.Where(buildConditionNotInArray(addAliasToColumnName("email", alias)), pg.Array(f.EmailNEQ))
|
||||
q = q.Where(sqlutils.BuildConditionNotInArray(sqlutils.AddAliasToColumnName("email", alias)), pg.Array(f.EmailNEQ))
|
||||
}
|
||||
if !isZero(f.EmailMATCH) {
|
||||
q = q.Where(buildConditionMatch(addAliasToColumnName("email", alias)), f.EmailMATCH)
|
||||
q = q.Where(sqlutils.BuildConditionMatch(sqlutils.AddAliasToColumnName("email", alias)), f.EmailMATCH)
|
||||
}
|
||||
if !isZero(f.EmailIEQ) {
|
||||
q = q.Where(buildConditionIEQ(addAliasToColumnName("email", alias)), f.EmailIEQ)
|
||||
q = q.Where(sqlutils.BuildConditionIEQ(sqlutils.AddAliasToColumnName("email", alias)), f.EmailIEQ)
|
||||
}
|
||||
|
||||
if !isZero(f.CreatedAt) {
|
||||
q = q.Where(buildConditionEquals(addAliasToColumnName("created_at", alias)), f.CreatedAt)
|
||||
q = q.Where(sqlutils.BuildConditionEquals(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAt)
|
||||
}
|
||||
if !isZero(f.CreatedAtGT) {
|
||||
q = q.Where(buildConditionGT(addAliasToColumnName("created_at", alias)), f.CreatedAtGT)
|
||||
q = q.Where(sqlutils.BuildConditionGT(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT)
|
||||
}
|
||||
if !isZero(f.CreatedAtGTE) {
|
||||
q = q.Where(buildConditionGTE(addAliasToColumnName("created_at", alias)), f.CreatedAtGTE)
|
||||
q = q.Where(sqlutils.BuildConditionGTE(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE)
|
||||
}
|
||||
if !isZero(f.CreatedAtLT) {
|
||||
q = q.Where(buildConditionLT(addAliasToColumnName("created_at", alias)), f.CreatedAtLT)
|
||||
q = q.Where(sqlutils.BuildConditionLT(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT)
|
||||
}
|
||||
if !isZero(f.CreatedAtLTE) {
|
||||
q = q.Where(buildConditionLTE(addAliasToColumnName("created_at", alias)), f.CreatedAtLTE)
|
||||
q = q.Where(sqlutils.BuildConditionLTE(sqlutils.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
|
52
pkg/utils/sql/sql.go
Normal file
52
pkg/utils/sql/sql.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
package sqlutils
|
||||
|
||||
import "strings"
|
||||
|
||||
func AddAliasToColumnName(column, prefix string) string {
|
||||
if prefix != "" && !strings.HasPrefix(column, prefix+".") {
|
||||
column = WrapStringInDoubleQuotes(prefix) + "." + WrapStringInDoubleQuotes(column)
|
||||
} else {
|
||||
column = WrapStringInDoubleQuotes(column)
|
||||
}
|
||||
return column
|
||||
}
|
||||
|
||||
func WrapStringInDoubleQuotes(str string) string {
|
||||
return `"` + str + `"`
|
||||
}
|
||||
|
||||
func BuildConditionEquals(column string) string {
|
||||
return column + " = ?"
|
||||
}
|
||||
|
||||
func BuildConditionLT(column string) string {
|
||||
return column + " < ?"
|
||||
}
|
||||
|
||||
func BuildConditionLTE(column string) string {
|
||||
return column + " <= ?"
|
||||
}
|
||||
|
||||
func BuildConditionGT(column string) string {
|
||||
return column + " > ?"
|
||||
}
|
||||
|
||||
func BuildConditionGTE(column string) string {
|
||||
return column + " >= ?"
|
||||
}
|
||||
|
||||
func BuildConditionMatch(column string) string {
|
||||
return column + " LIKE ?"
|
||||
}
|
||||
|
||||
func BuildConditionIEQ(column string) string {
|
||||
return column + " ILIKE ?"
|
||||
}
|
||||
|
||||
func BuildConditionArray(column string) string {
|
||||
return column + " = ANY(?)"
|
||||
}
|
||||
|
||||
func BuildConditionNotInArray(column string) string {
|
||||
return "NOT (" + BuildConditionArray(column) + ")"
|
||||
}
|
Reference in New Issue
Block a user