step 6 : check distance graphql

This commit is contained in:
sindhu
2024-01-22 17:09:02 +07:00
parent ba1f43ae70
commit e9e4d5bf05
7 changed files with 566 additions and 199 deletions

View File

@@ -52,7 +52,7 @@ type ComplexityRoot struct {
} }
Query struct { Query struct {
QueryCheckDistance func(childComplexity int, mStaffID string, mCompanyID string, mCompanyLatitude string, mCompanyLongitude string, currentLatitude string, currentLongitude string) int QueryCheckDistance func(childComplexity int, mStaffID string, mCompanyID string, currentLatitude string, currentLongitude string) int
SearchStaffByEmail func(childComplexity int, email string) int SearchStaffByEmail func(childComplexity int, email string) int
StaffGetByStaffID func(childComplexity int, staffID string) int StaffGetByStaffID func(childComplexity int, staffID string) int
StaffListBySearch func(childComplexity int, search *string, page *int, maxPerPage *int) int StaffListBySearch func(childComplexity int, search *string, page *int, maxPerPage *int) int
@@ -60,8 +60,6 @@ type ComplexityRoot struct {
Staff struct { Staff struct {
CompanyID func(childComplexity int) int CompanyID func(childComplexity int) int
CompanyLatitude func(childComplexity int) int
CompanyLongitude func(childComplexity int) int
CompanyName func(childComplexity int) int CompanyName func(childComplexity int) int
CreatedAt func(childComplexity int) int CreatedAt func(childComplexity int) int
DisplayNameGoogleSignIn func(childComplexity int) int DisplayNameGoogleSignIn func(childComplexity int) int
@@ -83,6 +81,15 @@ type ComplexityRoot struct {
Token func(childComplexity int) int Token func(childComplexity int) int
} }
TransAbsensiCheckDistanceResponse struct {
CurrentDistance func(childComplexity int) int
MaxDistance func(childComplexity int) int
Message func(childComplexity int) int
Selfie func(childComplexity int) int
Status func(childComplexity int) int
Unit func(childComplexity int) int
}
TransAbsensiResponse struct { TransAbsensiResponse struct {
Message func(childComplexity int) int Message func(childComplexity int) int
Status func(childComplexity int) int Status func(childComplexity int) int
@@ -97,7 +104,7 @@ type QueryResolver interface {
SearchStaffByEmail(ctx context.Context, email string) (*model.Staff, error) SearchStaffByEmail(ctx context.Context, email string) (*model.Staff, error)
StaffGetByStaffID(ctx context.Context, staffID string) (*model.Staff, error) StaffGetByStaffID(ctx context.Context, staffID string) (*model.Staff, error)
StaffListBySearch(ctx context.Context, search *string, page *int, maxPerPage *int) ([]*model.Staff, error) StaffListBySearch(ctx context.Context, search *string, page *int, maxPerPage *int) ([]*model.Staff, error)
QueryCheckDistance(ctx context.Context, mStaffID string, mCompanyID string, mCompanyLatitude string, mCompanyLongitude string, currentLatitude string, currentLongitude string) (*model.TransAbsensiResponse, error) QueryCheckDistance(ctx context.Context, mStaffID string, mCompanyID string, currentLatitude string, currentLongitude string) (*model.TransAbsensiCheckDistanceResponse, error)
} }
type executableSchema struct { type executableSchema struct {
@@ -153,7 +160,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return 0, false return 0, false
} }
return e.complexity.Query.QueryCheckDistance(childComplexity, args["M_StaffID"].(string), args["M_CompanyID"].(string), args["M_CompanyLatitude"].(string), args["M_CompanyLongitude"].(string), args["CurrentLatitude"].(string), args["CurrentLongitude"].(string)), true return e.complexity.Query.QueryCheckDistance(childComplexity, args["M_StaffID"].(string), args["M_CompanyID"].(string), args["CurrentLatitude"].(string), args["CurrentLongitude"].(string)), true
case "Query.searchStaffByEmail": case "Query.searchStaffByEmail":
if e.complexity.Query.SearchStaffByEmail == nil { if e.complexity.Query.SearchStaffByEmail == nil {
@@ -198,20 +205,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return e.complexity.Staff.CompanyID(childComplexity), true return e.complexity.Staff.CompanyID(childComplexity), true
case "Staff.company_latitude":
if e.complexity.Staff.CompanyLatitude == nil {
break
}
return e.complexity.Staff.CompanyLatitude(childComplexity), true
case "Staff.company_longitude":
if e.complexity.Staff.CompanyLongitude == nil {
break
}
return e.complexity.Staff.CompanyLongitude(childComplexity), true
case "Staff.company_name": case "Staff.company_name":
if e.complexity.Staff.CompanyName == nil { if e.complexity.Staff.CompanyName == nil {
break break
@@ -324,6 +317,48 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return e.complexity.TokenResponse.Token(childComplexity), true return e.complexity.TokenResponse.Token(childComplexity), true
case "TransAbsensiCheckDistanceResponse.current_distance":
if e.complexity.TransAbsensiCheckDistanceResponse.CurrentDistance == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.CurrentDistance(childComplexity), true
case "TransAbsensiCheckDistanceResponse.max_distance":
if e.complexity.TransAbsensiCheckDistanceResponse.MaxDistance == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.MaxDistance(childComplexity), true
case "TransAbsensiCheckDistanceResponse.message":
if e.complexity.TransAbsensiCheckDistanceResponse.Message == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.Message(childComplexity), true
case "TransAbsensiCheckDistanceResponse.selfie":
if e.complexity.TransAbsensiCheckDistanceResponse.Selfie == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.Selfie(childComplexity), true
case "TransAbsensiCheckDistanceResponse.status":
if e.complexity.TransAbsensiCheckDistanceResponse.Status == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.Status(childComplexity), true
case "TransAbsensiCheckDistanceResponse.unit":
if e.complexity.TransAbsensiCheckDistanceResponse.Unit == nil {
break
}
return e.complexity.TransAbsensiCheckDistanceResponse.Unit(childComplexity), true
case "TransAbsensiResponse.message": case "TransAbsensiResponse.message":
if e.complexity.TransAbsensiResponse.Message == nil { if e.complexity.TransAbsensiResponse.Message == nil {
break break
@@ -445,23 +480,21 @@ var sources = []*ast.Source{
{Name: "../graphqls/schema.graphqls", Input: ``, BuiltIn: false}, {Name: "../graphqls/schema.graphqls", Input: ``, BuiltIn: false},
{Name: "../graphqls/staff.graphqls", Input: `# model staff {Name: "../graphqls/staff.graphqls", Input: `# model staff
type Staff { type Staff {
staff_id: ID! staff_id: ID!
nip: String! nip: String!
name: String! name: String!
email: String! email: String!
phone_number: String phone_number: String
company_id: ID! company_id: ID!
company_name: String company_name: String
company_latitude:String is_active: String
company_longitude:String is_login: String
is_active: String token: String
is_login: String expired: String
token: String id_google_sign_in: String!
expired: String display_name_google_sign_in: String
id_google_sign_in: String! created_at: String
display_name_google_sign_in: String last_updated_at: String
created_at: String
last_updated_at: String
} }
# model token response ketika login # model token response ketika login
@@ -487,16 +520,26 @@ type TransAbsensiResponse {
message: String message: String
} }
# check distance response
type TransAbsensiCheckDistanceResponse {
status: String
message: String
selfie: String
max_distance: String
current_distance: String
unit: String
}
# query # query
extend type Query { extend type Query {
# untuk cek distance dengan fungsi distance_v2 di database # untuk cek distance dengan fungsi distance_v2 di database
queryCheckDistance(M_StaffID:String!, M_CompanyID:String!, M_CompanyLatitude:String!, M_CompanyLongitude:String!, CurrentLatitude:String!, CurrentLongitude:String!) : TransAbsensiResponse! queryCheckDistance(M_StaffID:String!, M_CompanyID:String!,CurrentLatitude:String!, CurrentLongitude:String!) : TransAbsensiCheckDistanceResponse!
} }
# mutation # mutation
extend type Mutation { extend type Mutation {
# untuk clock in absensi (absensi masuk) # untuk clock in absensi (absensi masuk)
mutationClockInAttendance(T_TransactionM_AbsensiTypeID:String!, T_TransactionM_StaffID:String!, T_TransactionM_CompanyID:String!, T_TransactionCurrentLatitude:String!, T_TransactionCurrentLongitude:String!, T_TransactionDistance:String!, T_TransactionSelfiePhoto:String, T_TransactionNote:String):TransAbsensiResponse! mutationClockInAttendance(T_TransactionM_AbsensiTypeID:String!, T_TransactionM_StaffID:String!, T_TransactionM_CompanyID:String!, T_TransactionCurrentLatitude:String!, T_TransactionCurrentLongitude:String!, T_TransactionDistance:String!, T_TransactionSelfiePhoto:String, T_TransactionNote:String):TransAbsensiResponse!
} `, BuiltIn: false}, } `, BuiltIn: false},
} }
var parsedSchema = gqlparser.MustLoadSchema(sources...) var parsedSchema = gqlparser.MustLoadSchema(sources...)
@@ -644,41 +687,23 @@ func (ec *executionContext) field_Query_queryCheckDistance_args(ctx context.Cont
} }
args["M_CompanyID"] = arg1 args["M_CompanyID"] = arg1
var arg2 string var arg2 string
if tmp, ok := rawArgs["M_CompanyLatitude"]; ok { if tmp, ok := rawArgs["CurrentLatitude"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("M_CompanyLatitude")) ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("CurrentLatitude"))
arg2, err = ec.unmarshalNString2string(ctx, tmp) arg2, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
args["M_CompanyLatitude"] = arg2 args["CurrentLatitude"] = arg2
var arg3 string var arg3 string
if tmp, ok := rawArgs["M_CompanyLongitude"]; ok { if tmp, ok := rawArgs["CurrentLongitude"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("M_CompanyLongitude")) ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("CurrentLongitude"))
arg3, err = ec.unmarshalNString2string(ctx, tmp) arg3, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
args["M_CompanyLongitude"] = arg3 args["CurrentLongitude"] = arg3
var arg4 string
if tmp, ok := rawArgs["CurrentLatitude"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("CurrentLatitude"))
arg4, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["CurrentLatitude"] = arg4
var arg5 string
if tmp, ok := rawArgs["CurrentLongitude"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("CurrentLongitude"))
arg5, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["CurrentLongitude"] = arg5
return args, nil return args, nil
} }
@@ -836,10 +861,6 @@ func (ec *executionContext) fieldContext_Mutation_loginAttendance(ctx context.Co
return ec.fieldContext_Staff_company_id(ctx, field) return ec.fieldContext_Staff_company_id(ctx, field)
case "company_name": case "company_name":
return ec.fieldContext_Staff_company_name(ctx, field) return ec.fieldContext_Staff_company_name(ctx, field)
case "company_latitude":
return ec.fieldContext_Staff_company_latitude(ctx, field)
case "company_longitude":
return ec.fieldContext_Staff_company_longitude(ctx, field)
case "is_active": case "is_active":
return ec.fieldContext_Staff_is_active(ctx, field) return ec.fieldContext_Staff_is_active(ctx, field)
case "is_login": case "is_login":
@@ -988,10 +1009,6 @@ func (ec *executionContext) fieldContext_Query_searchStaffByEmail(ctx context.Co
return ec.fieldContext_Staff_company_id(ctx, field) return ec.fieldContext_Staff_company_id(ctx, field)
case "company_name": case "company_name":
return ec.fieldContext_Staff_company_name(ctx, field) return ec.fieldContext_Staff_company_name(ctx, field)
case "company_latitude":
return ec.fieldContext_Staff_company_latitude(ctx, field)
case "company_longitude":
return ec.fieldContext_Staff_company_longitude(ctx, field)
case "is_active": case "is_active":
return ec.fieldContext_Staff_is_active(ctx, field) return ec.fieldContext_Staff_is_active(ctx, field)
case "is_login": case "is_login":
@@ -1079,10 +1096,6 @@ func (ec *executionContext) fieldContext_Query_staffGetByStaffId(ctx context.Con
return ec.fieldContext_Staff_company_id(ctx, field) return ec.fieldContext_Staff_company_id(ctx, field)
case "company_name": case "company_name":
return ec.fieldContext_Staff_company_name(ctx, field) return ec.fieldContext_Staff_company_name(ctx, field)
case "company_latitude":
return ec.fieldContext_Staff_company_latitude(ctx, field)
case "company_longitude":
return ec.fieldContext_Staff_company_longitude(ctx, field)
case "is_active": case "is_active":
return ec.fieldContext_Staff_is_active(ctx, field) return ec.fieldContext_Staff_is_active(ctx, field)
case "is_login": case "is_login":
@@ -1170,10 +1183,6 @@ func (ec *executionContext) fieldContext_Query_staffListBySearch(ctx context.Con
return ec.fieldContext_Staff_company_id(ctx, field) return ec.fieldContext_Staff_company_id(ctx, field)
case "company_name": case "company_name":
return ec.fieldContext_Staff_company_name(ctx, field) return ec.fieldContext_Staff_company_name(ctx, field)
case "company_latitude":
return ec.fieldContext_Staff_company_latitude(ctx, field)
case "company_longitude":
return ec.fieldContext_Staff_company_longitude(ctx, field)
case "is_active": case "is_active":
return ec.fieldContext_Staff_is_active(ctx, field) return ec.fieldContext_Staff_is_active(ctx, field)
case "is_login": case "is_login":
@@ -1222,7 +1231,7 @@ func (ec *executionContext) _Query_queryCheckDistance(ctx context.Context, field
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().QueryCheckDistance(rctx, fc.Args["M_StaffID"].(string), fc.Args["M_CompanyID"].(string), fc.Args["M_CompanyLatitude"].(string), fc.Args["M_CompanyLongitude"].(string), fc.Args["CurrentLatitude"].(string), fc.Args["CurrentLongitude"].(string)) return ec.resolvers.Query().QueryCheckDistance(rctx, fc.Args["M_StaffID"].(string), fc.Args["M_CompanyID"].(string), fc.Args["CurrentLatitude"].(string), fc.Args["CurrentLongitude"].(string))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -1234,9 +1243,9 @@ func (ec *executionContext) _Query_queryCheckDistance(ctx context.Context, field
} }
return graphql.Null return graphql.Null
} }
res := resTmp.(*model.TransAbsensiResponse) res := resTmp.(*model.TransAbsensiCheckDistanceResponse)
fc.Result = res fc.Result = res
return ec.marshalNTransAbsensiResponse2ᚖcomᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiResponse(ctx, field.Selections, res) return ec.marshalNTransAbsensiCheckDistanceResponse2ᚖcomᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiCheckDistanceResponse(ctx, field.Selections, res)
} }
func (ec *executionContext) fieldContext_Query_queryCheckDistance(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { func (ec *executionContext) fieldContext_Query_queryCheckDistance(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -1248,11 +1257,19 @@ func (ec *executionContext) fieldContext_Query_queryCheckDistance(ctx context.Co
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
switch field.Name { switch field.Name {
case "status": case "status":
return ec.fieldContext_TransAbsensiResponse_status(ctx, field) return ec.fieldContext_TransAbsensiCheckDistanceResponse_status(ctx, field)
case "message": case "message":
return ec.fieldContext_TransAbsensiResponse_message(ctx, field) return ec.fieldContext_TransAbsensiCheckDistanceResponse_message(ctx, field)
case "selfie":
return ec.fieldContext_TransAbsensiCheckDistanceResponse_selfie(ctx, field)
case "max_distance":
return ec.fieldContext_TransAbsensiCheckDistanceResponse_max_distance(ctx, field)
case "current_distance":
return ec.fieldContext_TransAbsensiCheckDistanceResponse_current_distance(ctx, field)
case "unit":
return ec.fieldContext_TransAbsensiCheckDistanceResponse_unit(ctx, field)
} }
return nil, fmt.Errorf("no field named %q was found under type TransAbsensiResponse", field.Name) return nil, fmt.Errorf("no field named %q was found under type TransAbsensiCheckDistanceResponse", field.Name)
}, },
} }
defer func() { defer func() {
@@ -1700,88 +1717,6 @@ func (ec *executionContext) fieldContext_Staff_company_name(ctx context.Context,
return fc, nil return fc, nil
} }
func (ec *executionContext) _Staff_company_latitude(ctx context.Context, field graphql.CollectedField, obj *model.Staff) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_Staff_company_latitude(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.CompanyLatitude, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_Staff_company_latitude(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "Staff",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _Staff_company_longitude(ctx context.Context, field graphql.CollectedField, obj *model.Staff) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_Staff_company_longitude(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.CompanyLongitude, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_Staff_company_longitude(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "Staff",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _Staff_is_active(ctx context.Context, field graphql.CollectedField, obj *model.Staff) (ret graphql.Marshaler) { func (ec *executionContext) _Staff_is_active(ctx context.Context, field graphql.CollectedField, obj *model.Staff) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_Staff_is_active(ctx, field) fc, err := ec.fieldContext_Staff_is_active(ctx, field)
if err != nil { if err != nil {
@@ -2195,6 +2130,252 @@ func (ec *executionContext) fieldContext_TokenResponse_message(ctx context.Conte
return fc, nil return fc, nil
} }
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_status(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_status(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Status, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_status(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_message(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_message(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Message, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_message(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_selfie(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_selfie(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Selfie, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_selfie(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_max_distance(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_max_distance(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MaxDistance, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_max_distance(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_current_distance(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_current_distance(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.CurrentDistance, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_current_distance(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse_unit(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiCheckDistanceResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiCheckDistanceResponse_unit(ctx, field)
if err != nil {
return graphql.Null
}
ctx = graphql.WithFieldContext(ctx, fc)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Unit, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) fieldContext_TransAbsensiCheckDistanceResponse_unit(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "TransAbsensiCheckDistanceResponse",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type String does not have child fields")
},
}
return fc, nil
}
func (ec *executionContext) _TransAbsensiResponse_status(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiResponse) (ret graphql.Marshaler) { func (ec *executionContext) _TransAbsensiResponse_status(ctx context.Context, field graphql.CollectedField, obj *model.TransAbsensiResponse) (ret graphql.Marshaler) {
fc, err := ec.fieldContext_TransAbsensiResponse_status(ctx, field) fc, err := ec.fieldContext_TransAbsensiResponse_status(ctx, field)
if err != nil { if err != nil {
@@ -4292,10 +4473,6 @@ func (ec *executionContext) _Staff(ctx context.Context, sel ast.SelectionSet, ob
} }
case "company_name": case "company_name":
out.Values[i] = ec._Staff_company_name(ctx, field, obj) out.Values[i] = ec._Staff_company_name(ctx, field, obj)
case "company_latitude":
out.Values[i] = ec._Staff_company_latitude(ctx, field, obj)
case "company_longitude":
out.Values[i] = ec._Staff_company_longitude(ctx, field, obj)
case "is_active": case "is_active":
out.Values[i] = ec._Staff_is_active(ctx, field, obj) out.Values[i] = ec._Staff_is_active(ctx, field, obj)
case "is_login": case "is_login":
@@ -4376,6 +4553,52 @@ func (ec *executionContext) _TokenResponse(ctx context.Context, sel ast.Selectio
return out return out
} }
var transAbsensiCheckDistanceResponseImplementors = []string{"TransAbsensiCheckDistanceResponse"}
func (ec *executionContext) _TransAbsensiCheckDistanceResponse(ctx context.Context, sel ast.SelectionSet, obj *model.TransAbsensiCheckDistanceResponse) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, transAbsensiCheckDistanceResponseImplementors)
out := graphql.NewFieldSet(fields)
deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("TransAbsensiCheckDistanceResponse")
case "status":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_status(ctx, field, obj)
case "message":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_message(ctx, field, obj)
case "selfie":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_selfie(ctx, field, obj)
case "max_distance":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_max_distance(ctx, field, obj)
case "current_distance":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_current_distance(ctx, field, obj)
case "unit":
out.Values[i] = ec._TransAbsensiCheckDistanceResponse_unit(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch(ctx)
if out.Invalids > 0 {
return graphql.Null
}
atomic.AddInt32(&ec.deferred, int32(len(deferred)))
for label, dfs := range deferred {
ec.processDeferredGroup(graphql.DeferredGroup{
Label: label,
Path: graphql.GetPath(ctx),
FieldSet: dfs,
Context: ctx,
})
}
return out
}
var transAbsensiResponseImplementors = []string{"TransAbsensiResponse"} var transAbsensiResponseImplementors = []string{"TransAbsensiResponse"}
func (ec *executionContext) _TransAbsensiResponse(ctx context.Context, sel ast.SelectionSet, obj *model.TransAbsensiResponse) graphql.Marshaler { func (ec *executionContext) _TransAbsensiResponse(ctx context.Context, sel ast.SelectionSet, obj *model.TransAbsensiResponse) graphql.Marshaler {
@@ -4843,6 +5066,20 @@ func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.S
return res return res
} }
func (ec *executionContext) marshalNTransAbsensiCheckDistanceResponse2comᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiCheckDistanceResponse(ctx context.Context, sel ast.SelectionSet, v model.TransAbsensiCheckDistanceResponse) graphql.Marshaler {
return ec._TransAbsensiCheckDistanceResponse(ctx, sel, &v)
}
func (ec *executionContext) marshalNTransAbsensiCheckDistanceResponse2ᚖcomᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiCheckDistanceResponse(ctx context.Context, sel ast.SelectionSet, v *model.TransAbsensiCheckDistanceResponse) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "the requested element is null which the schema does not allow")
}
return graphql.Null
}
return ec._TransAbsensiCheckDistanceResponse(ctx, sel, v)
}
func (ec *executionContext) marshalNTransAbsensiResponse2comᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiResponse(ctx context.Context, sel ast.SelectionSet, v model.TransAbsensiResponse) graphql.Marshaler { func (ec *executionContext) marshalNTransAbsensiResponse2comᚗsismedikaᚗcomᚗabsensiᚋgraphᚋmodelᚐTransAbsensiResponse(ctx context.Context, sel ast.SelectionSet, v model.TransAbsensiResponse) graphql.Marshaler {
return ec._TransAbsensiResponse(ctx, sel, &v) return ec._TransAbsensiResponse(ctx, sel, &v)
} }

View File

@@ -7,8 +7,6 @@ type Staff {
phone_number: String phone_number: String
company_id: ID! company_id: ID!
company_name: String company_name: String
company_latitude:String
company_longitude:String
is_active: String is_active: String
is_login: String is_login: String
token: String token: String

View File

@@ -4,14 +4,24 @@ type TransAbsensiResponse {
message: String message: String
} }
# check distance response
type TransAbsensiCheckDistanceResponse {
status: String
message: String
selfie: String
max_distance: String
current_distance: String
unit: String
}
# query # query
extend type Query { extend type Query {
# untuk cek distance dengan fungsi distance_v2 di database # untuk cek distance dengan fungsi distance_v2 di database
queryCheckDistance(M_StaffID:String!, M_CompanyID:String!, M_CompanyLatitude:String!, M_CompanyLongitude:String!, CurrentLatitude:String!, CurrentLongitude:String!) : TransAbsensiResponse! queryCheckDistance(M_StaffID:String!, M_CompanyID:String!,CurrentLatitude:String!, CurrentLongitude:String!) : TransAbsensiCheckDistanceResponse!
} }
# mutation # mutation
extend type Mutation { extend type Mutation {
# untuk clock in absensi (absensi masuk) # untuk clock in absensi (absensi masuk)
mutationClockInAttendance(T_TransactionM_AbsensiTypeID:String!, T_TransactionM_StaffID:String!, T_TransactionM_CompanyID:String!, T_TransactionCurrentLatitude:String!, T_TransactionCurrentLongitude:String!, T_TransactionDistance:String!, T_TransactionSelfiePhoto:String, T_TransactionNote:String):TransAbsensiResponse! mutationClockInAttendance(T_TransactionM_AbsensiTypeID:String!, T_TransactionM_StaffID:String!, T_TransactionM_CompanyID:String!, T_TransactionCurrentLatitude:String!, T_TransactionCurrentLongitude:String!, T_TransactionDistance:String!, T_TransactionSelfiePhoto:String, T_TransactionNote:String):TransAbsensiResponse!
} }

View File

@@ -16,8 +16,6 @@ type Staff struct {
PhoneNumber *string `json:"phone_number,omitempty"` PhoneNumber *string `json:"phone_number,omitempty"`
CompanyID string `json:"company_id"` CompanyID string `json:"company_id"`
CompanyName *string `json:"company_name,omitempty"` CompanyName *string `json:"company_name,omitempty"`
CompanyLatitude *string `json:"company_latitude,omitempty"`
CompanyLongitude *string `json:"company_longitude,omitempty"`
IsActive *string `json:"is_active,omitempty"` IsActive *string `json:"is_active,omitempty"`
IsLogin *string `json:"is_login,omitempty"` IsLogin *string `json:"is_login,omitempty"`
Token *string `json:"token,omitempty"` Token *string `json:"token,omitempty"`
@@ -33,6 +31,15 @@ type TokenResponse struct {
Message *string `json:"message,omitempty"` Message *string `json:"message,omitempty"`
} }
type TransAbsensiCheckDistanceResponse struct {
Status *string `json:"status,omitempty"`
Message *string `json:"message,omitempty"`
Selfie *string `json:"selfie,omitempty"`
MaxDistance *string `json:"max_distance,omitempty"`
CurrentDistance *string `json:"current_distance,omitempty"`
Unit *string `json:"unit,omitempty"`
}
type TransAbsensiResponse struct { type TransAbsensiResponse struct {
Status *string `json:"status,omitempty"` Status *string `json:"status,omitempty"`
Message *string `json:"message,omitempty"` Message *string `json:"message,omitempty"`

View File

@@ -9,6 +9,7 @@ import (
"fmt" "fmt"
"com.sismedika.com.absensi/graph/model" "com.sismedika.com.absensi/graph/model"
transabsensiinternal "com.sismedika.com.absensi/internal/transabsensi"
) )
// MutationClockInAttendance is the resolver for the mutationClockInAttendance field. // MutationClockInAttendance is the resolver for the mutationClockInAttendance field.
@@ -17,19 +18,8 @@ func (r *mutationResolver) MutationClockInAttendance(ctx context.Context, tTrans
} }
// QueryCheckDistance is the resolver for the queryCheckDistance field. // QueryCheckDistance is the resolver for the queryCheckDistance field.
func (r *queryResolver) QueryCheckDistance(ctx context.Context, mStaffID string, mCompanyID string, mCompanyLatitude string, mCompanyLongitude string, currentLatitude string, currentLongitude string) (*model.TransAbsensiResponse, error) { func (r *queryResolver) QueryCheckDistance(ctx context.Context, mStaffID string, mCompanyID string, currentLatitude string, currentLongitude string) (*model.TransAbsensiCheckDistanceResponse, error) {
panic(fmt.Errorf("not implemented: QueryCheckDistance - queryCheckDistance")) // panic(fmt.Errorf("not implemented: QueryCheckDistance - queryCheckDistance"))
} var transabsensiinternal transabsensiinternal.TransAbsensiCheckDistanceResponse
return transabsensiinternal.CheckDistance(mStaffID, mCompanyID, currentLatitude, currentLongitude)
// !!! WARNING !!!
// The code below was going to be deleted when updating resolvers. It has been copied here so you have
// one last chance to move it out of harms way if you want. There are two reasons this happens:
// - When renaming or deleting a resolver the old code will be put in here. You can safely delete
// it when you're done.
// - You have helper methods in this file. Move them out to keep these resolver files clean.
func (r *mutationResolver) MClockInAttendance(ctx context.Context, tTransactionMAbsensiTypeID string, tTransactionMStaffID string, tTransactionMCompanyID string, tTransactionCurrentLatitude string, tTransactionCurrentLongitude string, tTransactionDistance string, tTransactionSelfiePhoto *string, tTransactionNote *string) (*model.TransAbsensiResponse, error) {
panic(fmt.Errorf("not implemented: MClockInAttendance - mClockInAttendance"))
}
func (r *queryResolver) QCheckDistance(ctx context.Context, mStaffID string, mCompanyID string, mCompanyLatitude string, mCompanyLongitude string, currentLatitude string, currentLongitude string) (*model.TransAbsensiResponse, error) {
panic(fmt.Errorf("not implemented: QCheckDistance - qCheckDistance"))
} }

View File

@@ -92,8 +92,6 @@ func (staff *Staff) LoginAttendance(email string, id_google_sign_in string) (*mo
M_StaffNoHp, M_StaffNoHp,
M_CompanyID, M_CompanyID,
M_CompanyName, M_CompanyName,
M_CompanyLatitude,
M_CompanyLongitude,
M_StaffIsActive, M_StaffIsActive,
M_StaffIsLogin, M_StaffIsLogin,
M_StaffToken, M_StaffToken,
@@ -123,8 +121,6 @@ func (staff *Staff) LoginAttendance(email string, id_google_sign_in string) (*mo
&ret.PhoneNumber, &ret.PhoneNumber,
&ret.CompanyID, &ret.CompanyID,
&ret.CompanyName, &ret.CompanyName,
&ret.CompanyLatitude,
&ret.CompanyLongitude,
&ret.IsActive, &ret.IsActive,
&ret.IsLogin, &ret.IsLogin,
&ret.Token, &ret.Token,

View File

@@ -0,0 +1,129 @@
package transabsensi
import (
"log"
"strconv"
"com.sismedika.com.absensi/graph/model"
db "com.sismedika.com.absensi/pkg/database"
)
// diambil dari graph/model/struct nya TransAbsensiResponse
type TransAbsensiCheckDistanceResponse model.TransAbsensiCheckDistanceResponse
func (transabsensi *TransAbsensiCheckDistanceResponse) CheckDistance(M_StaffID string, M_CompanyID string, CurrentLatitude string, CurrentLongitude string) (*model.TransAbsensiCheckDistanceResponse, error) {
// inisialisasi
var err error
var ret model.TransAbsensiCheckDistanceResponse
var rMaxDistance int
var rCurrentDistance float64
var rMCompanyLongitude string
var rMCompanyLatitude string
var statusCheck string
q := `SELECT
M_CompanyLatitude,
M_CompanyLongitude,
M_CompanyMaxDistance
FROM m_company
WHERE M_CompanyIsActive = 'Y'
AND M_CompanyID = ?`
row := db.Handle.QueryRow(
q,
M_CompanyID)
db.LogSQL(q)
err = row.Scan(
&rMCompanyLatitude,
&rMCompanyLongitude,
&rMaxDistance,
)
if err != nil {
log.Printf("Error m_company select max distance: %v", err)
log.Printf("Executing query: %s\n", q)
return nil, err
}
// get distance
qCurrentDistance := `SELECT distance_v2(?, ?, ?, ?)`
rowxCurrentDistance := db.Handle.QueryRow(
qCurrentDistance,
CurrentLatitude,
CurrentLongitude,
rMCompanyLatitude,
rMCompanyLongitude,
)
db.LogSQL(qCurrentDistance)
err = rowxCurrentDistance.Scan(
&rCurrentDistance,
)
if err != nil {
log.Printf("Error m_staff select: %v", err)
log.Printf("Executing query: %s\n", qCurrentDistance)
return nil, err
}
// check distance
qCheckDistance := `SELECT IF(distance_v2(?, ?, ?, ?) < ?, 'range', 'not range') AS distance_status`
rowx := db.Handle.QueryRow(
qCheckDistance,
CurrentLatitude,
CurrentLongitude,
rMCompanyLatitude,
rMCompanyLongitude,
rMaxDistance,
)
db.LogSQL(qCheckDistance)
err = rowx.Scan(
&statusCheck,
)
if err != nil {
log.Printf("Error m_staff select: %v", err)
log.Printf("Executing query: %s\n", qCheckDistance)
return nil, err
}
if statusCheck == "range" {
// buat di set isi nya kosong dulu
ret.Status = new(string)
ret.Message = new(string)
ret.Selfie = new(string)
ret.CurrentDistance = new(string)
ret.MaxDistance = new(string)
ret.Unit = new(string)
// di set kan langsung dengan * atau pointer
*ret.Status = "OK"
*ret.Selfie = "FALSE"
*ret.Unit = "m"
*ret.CurrentDistance = strconv.FormatFloat(rCurrentDistance, 'f', -1, 64)
*ret.MaxDistance = strconv.Itoa(rMaxDistance)
*ret.Message = "Masih dalam jarak absensi"
}
if statusCheck != "range" {
// buat di set isi nya kosong dulu
ret.Status = new(string)
ret.Message = new(string)
ret.Selfie = new(string)
ret.CurrentDistance = new(string)
ret.MaxDistance = new(string)
ret.Unit = new(string)
// di set kan langsung dengan * atau pointer
*ret.Status = "OK"
*ret.Selfie = "TRUE"
*ret.Unit = "m"
*ret.CurrentDistance = strconv.FormatFloat(rCurrentDistance, 'f', -1, 64)
*ret.MaxDistance = strconv.Itoa(rMaxDistance)
*ret.Message = "Max Distance : " + strconv.Itoa(rMaxDistance) + " meter. Current Distance: " + strconv.FormatFloat(rCurrentDistance, 'f', -1, 64) + ". Jauh dari area absensi, perlu foto selfie"
}
// hasil return nya
return &ret, err
}