1 package mapper
2
3 import (
4 "edge-infra.dev/pkg/edge/api/bsl/types"
5 "edge-infra.dev/pkg/edge/api/graph/model"
6 "edge-infra.dev/pkg/edge/api/utils"
7 "edge-infra.dev/pkg/edge/bsl"
8 )
9
10 const (
11
12 DefaultLatitude = 90.0
13
14 DefaultLongitude = 180.0
15 )
16
17 func ToStoreSiteInfo(site *bsl.BSLInfo) *model.StoreSiteInfo {
18 dayparts := make([]*model.Dayparts, 0)
19 customAttributeSets := make([]*model.CustomAttributeSets, 0)
20 enterpriseSettings := make([]*model.EnterpriseSettings, 0)
21 hours := make([]*model.Hours, 0)
22 contacts := make([]*model.Contacts, 0)
23 for _, daypart := range site.DayParts {
24 daypartRef := daypart
25 dayparts = append(dayparts, &model.Dayparts{
26 Name: &daypartRef.Name,
27 Day: &daypartRef.Day,
28 Description: &daypartRef.Description,
29 StartTime: &daypartRef.StartTime,
30 EndTime: &daypartRef.EndTime,
31 })
32 }
33 for _, customAttributeSet := range site.CustomAttributeSets {
34 customAttributeSetRef := customAttributeSet
35 attributes := make([]*model.Attributes, 0)
36 for _, attribute := range customAttributeSetRef.Attributes {
37 attribute := attribute
38 attributes = append(attributes, &model.Attributes{
39 Key: &attribute.Key,
40 Value: &attribute.Value,
41 })
42 }
43 customAttributeSets = append(customAttributeSets, &model.CustomAttributeSets{
44 TypeName: &customAttributeSetRef.TypeName,
45 Attributes: attributes,
46 })
47 }
48 if len(site.EnterpriseSettings) > 0 {
49 configurationSettings := make([]*model.ConfigurationSettings, 0)
50 for _, enterpriseSetting := range site.EnterpriseSettings {
51 enterpriseSettingRef := enterpriseSetting
52 if len(enterpriseSettingRef.ConfigurationSettings) > 0 {
53 for _, configurationSetting := range enterpriseSettingRef.ConfigurationSettings {
54 configurationSetting := configurationSetting
55 configurationSettings = append(configurationSettings, &model.ConfigurationSettings{
56 Key: &configurationSetting.Key,
57 Value: &configurationSetting.Value,
58 })
59 }
60 }
61 enterpriseSettings = append(enterpriseSettings, &model.EnterpriseSettings{
62 EnterpriseUnitID: &enterpriseSettingRef.EnterpriseUnitID,
63 ConfigurationSetID: &model.ConfigurationSetID{
64 Name: &enterpriseSettingRef.ConfigurationSetID.Name,
65 },
66 ConfigurationSettings: configurationSettings,
67 })
68 }
69 }
70 for _, hour := range site.Hours {
71 hourRef := hour
72 hours = append(hours, &model.Hours{
73 Close: &model.Close{
74 Day: &hourRef.Close.Day,
75 Time: &hourRef.Close.Time,
76 },
77 Open: &model.Open{
78 Day: &hourRef.Open.Day,
79 Time: &hourRef.Open.Time,
80 },
81 })
82 }
83 for k, v := range site.Contacts {
84 contacts = append(contacts, &model.Contacts{
85 Identifier: k,
86 Details: &model.Contact{
87 Email: &v.Email,
88 ContactPerson: &v.ContactPerson,
89 PhoneNumber: &v.PhoneNumber,
90 PhoneNumberCountryCode: &v.PhoneNumberCountryCode,
91 },
92 },
93 )
94 }
95 return &model.StoreSiteInfo{
96 SiteName: site.SiteName,
97 Status: site.Status,
98 EnterpriseUnitName: site.EnterpriseUnitName,
99 Coordinates: &model.Coordinates{
100 Latitude: site.Coordinates.Latitude,
101 Longitude: site.Coordinates.Longitude,
102 },
103 Description: &site.Description,
104 ID: &site.ID,
105 ReferenceID: &site.ReferenceID,
106 TimeZone: &site.TimeZone,
107 ParentEnterpriseUnitID: &site.ParentEnterpriseUnitID,
108 OrganizationName: &site.OrganizationName,
109 Locked: &site.Locked,
110 LastModifiedOn: &site.LastModifiedOn,
111 DeactivatedOn: &site.DeactivatedOn,
112 CreatedOn: &site.CreatedOn,
113 Currency: &site.Currency,
114 Contact: &model.Contact{
115 ContactPerson: &site.Contact.ContactPerson,
116 PhoneNumberCountryCode: &site.Contact.PhoneNumberCountryCode,
117 PhoneNumber: &site.Contact.PhoneNumber,
118 },
119 Contacts: contacts,
120 Address: &model.Address{
121 Street: &site.Address.Street,
122 City: &site.Address.City,
123 State: &site.Address.State,
124 PostalCode: &site.Address.PostalCode,
125 Country: &site.Address.Country,
126 },
127 Dayparts: dayparts,
128 CustomAttributeSets: customAttributeSets,
129 EnterpriseSettings: enterpriseSettings,
130 Hours: hours,
131 }
132 }
133
134 func ToBSLInfo(site *model.StoreSiteInfo) *bsl.BSLInfo {
135 defaultValue := ""
136 defaultBool := false
137 dayparts := make([]bsl.DayParts, 0)
138 customAttributeSets := make([]bsl.CustomAttributeSet, 0)
139 enterpriseSettings := make([]bsl.EnterpriseSetting, 0)
140 hours := make([]bsl.Hours, 0)
141 contacts := make(map[string]bsl.Contact)
142 if utils.IsNullOrEmpty(site.ID) {
143 site.ID = &defaultValue
144 }
145 if utils.IsNullOrEmpty(site.Description) {
146 site.Description = &defaultValue
147 }
148 if utils.IsNullOrEmpty(site.OrganizationName) {
149 site.OrganizationName = &defaultValue
150 }
151 if utils.IsNullOrEmpty(site.ParentEnterpriseUnitID) {
152 site.ParentEnterpriseUnitID = &defaultValue
153 }
154 if utils.IsNullOrEmpty(site.ReferenceID) {
155 site.ReferenceID = &defaultValue
156 }
157 if len(site.Dayparts) > 0 {
158 for _, daypart := range site.Dayparts {
159 daypartRef := daypart
160 if utils.IsNullOrEmpty(daypartRef.Day) {
161 daypartRef.Day = &defaultValue
162 }
163 if utils.IsNullOrEmpty(daypartRef.Description) {
164 daypartRef.Description = &defaultValue
165 }
166 if utils.IsNullOrEmpty(daypartRef.Name) {
167 daypartRef.Name = &defaultValue
168 }
169 if utils.IsNullOrEmpty(daypartRef.StartTime) {
170 daypartRef.StartTime = &defaultValue
171 }
172 if utils.IsNullOrEmpty(daypartRef.EndTime) {
173 daypartRef.EndTime = &defaultValue
174 }
175 dayparts = append(dayparts, bsl.DayParts{
176 Name: *daypartRef.Name,
177 Description: *daypartRef.Description,
178 Day: *daypartRef.Day,
179 StartTime: *daypartRef.StartTime,
180 EndTime: *daypartRef.EndTime,
181 })
182 }
183 }
184 if site.Coordinates == nil {
185 site.Coordinates = &model.Coordinates{
186 Latitude: DefaultLatitude,
187 Longitude: DefaultLongitude,
188 }
189 }
190 if site.Address != nil && utils.IsNullOrEmpty(site.Address.Street) {
191 site.Address.Street = &defaultValue
192 }
193 if site.Address != nil && utils.IsNullOrEmpty(site.Address.City) {
194 site.Address.City = &defaultValue
195 }
196 if site.Address != nil && utils.IsNullOrEmpty(site.Address.State) {
197 site.Address.State = &defaultValue
198 }
199 if site.Address != nil && utils.IsNullOrEmpty(site.Address.Country) {
200 site.Address.Country = &defaultValue
201 }
202 if site.Address != nil && utils.IsNullOrEmpty(site.Address.PostalCode) {
203 site.Address.PostalCode = &defaultValue
204 }
205 if site.Address == nil {
206 site.Address = &model.Address{
207 City: &defaultValue,
208 Street: &defaultValue,
209 State: &defaultValue,
210 Country: &defaultValue,
211 PostalCode: &defaultValue,
212 }
213 }
214 if site.Contact != nil && utils.IsNullOrEmpty(site.Contact.ContactPerson) {
215 site.Contact.ContactPerson = &defaultValue
216 }
217 if site.Contact != nil && utils.IsNullOrEmpty(site.Contact.PhoneNumber) {
218 site.Contact.PhoneNumber = &defaultValue
219 }
220 if site.Contact != nil && utils.IsNullOrEmpty(site.Contact.PhoneNumberCountryCode) {
221 site.Contact.PhoneNumberCountryCode = &defaultValue
222 }
223 if site.Contact == nil {
224 site.Contact = &model.Contact{
225 ContactPerson: &defaultValue,
226 PhoneNumber: &defaultValue,
227 PhoneNumberCountryCode: &defaultValue,
228 }
229 }
230 if utils.IsNullOrEmpty(site.Currency) {
231 site.Currency = &defaultValue
232 }
233 if utils.IsNullOrEmpty(site.DeactivatedOn) {
234 site.DeactivatedOn = &defaultValue
235 }
236 if utils.IsNullOrEmpty(site.LastModifiedOn) {
237 site.LastModifiedOn = &defaultValue
238 }
239 if site.Locked == nil {
240 site.Locked = &defaultBool
241 }
242 if utils.IsNullOrEmpty(site.CreatedOn) {
243 site.CreatedOn = &defaultValue
244 }
245 if utils.IsNullOrEmpty(site.TimeZone) {
246 site.TimeZone = &defaultValue
247 }
248 if len(site.CustomAttributeSets) > 0 {
249 for _, _customAttributeSet := range site.CustomAttributeSets {
250 customAttributeSetRef := _customAttributeSet
251 customAttribute := make([]bsl.Attribute, 0)
252 if utils.IsNullOrEmpty(customAttributeSetRef.TypeName) {
253 customAttributeSetRef.TypeName = &defaultValue
254 }
255 if len(customAttributeSetRef.Attributes) > 0 {
256 for _, attribute := range customAttributeSetRef.Attributes {
257 attributeRef := attribute
258 if utils.IsNullOrEmpty(attributeRef.Key) {
259 attributeRef.Key = &defaultValue
260 }
261 if utils.IsNullOrEmpty(attributeRef.Value) {
262 attributeRef.Value = &defaultValue
263 }
264 customAttribute = append(customAttribute, bsl.Attribute{
265 Key: *attributeRef.Key,
266 Value: *attributeRef.Value,
267 })
268 }
269 }
270 customAttributeSets = append(customAttributeSets, bsl.CustomAttributeSet{
271 TypeName: *customAttributeSetRef.TypeName,
272 Attributes: customAttribute,
273 })
274 }
275 }
276 if len(site.EnterpriseSettings) > 0 {
277 for _, enterpriseSetting := range site.EnterpriseSettings {
278 configurationSettings := make([]bsl.ConfigurationSetting, 0)
279 if utils.IsNullOrEmpty(enterpriseSetting.EnterpriseUnitID) {
280 enterpriseSetting.EnterpriseUnitID = &defaultValue
281 }
282 if enterpriseSetting.ConfigurationSetID != nil && utils.IsNullOrEmpty(enterpriseSetting.ConfigurationSetID.Name) {
283 enterpriseSetting.ConfigurationSetID.Name = &defaultValue
284 }
285 if enterpriseSetting.ConfigurationSetID == nil {
286 enterpriseSetting.ConfigurationSetID = &model.ConfigurationSetID{
287 Name: &defaultValue,
288 }
289 }
290 if len(enterpriseSetting.ConfigurationSettings) > 0 {
291 for _, configurationSetting := range enterpriseSetting.ConfigurationSettings {
292 configurationSettingRef := configurationSetting
293 if utils.IsNullOrEmpty(configurationSettingRef.Key) {
294 configurationSettingRef.Key = &defaultValue
295 }
296 if utils.IsNullOrEmpty(configurationSettingRef.Value) {
297 configurationSettingRef.Value = &defaultValue
298 }
299 configurationSettings = append(configurationSettings, bsl.ConfigurationSetting{
300 Key: *configurationSettingRef.Key,
301 Value: *configurationSettingRef.Value,
302 })
303 }
304 }
305 enterpriseSettings = append(enterpriseSettings, bsl.EnterpriseSetting{
306 EnterpriseUnitID: *enterpriseSetting.EnterpriseUnitID,
307 ConfigurationSetID: bsl.ConfigurationSetID{
308 Name: *enterpriseSetting.ConfigurationSetID.Name,
309 },
310 ConfigurationSettings: configurationSettings,
311 })
312 }
313 }
314 if len(site.Hours) > 0 {
315 for _, hour := range site.Hours {
316 hourRef := hour
317 if hourRef.Close != nil && utils.IsNullOrEmpty(hourRef.Close.Day) {
318 hourRef.Close.Day = &defaultValue
319 }
320 if hourRef.Close != nil && utils.IsNullOrEmpty(hourRef.Close.Time) {
321 hourRef.Close.Time = &defaultValue
322 }
323 if hourRef.Close == nil {
324 hourRef.Close = &model.Close{}
325 }
326 if hourRef.Open != nil && utils.IsNullOrEmpty(hourRef.Open.Day) {
327 hourRef.Open.Day = &defaultValue
328 }
329 if hourRef.Open != nil && utils.IsNullOrEmpty(hourRef.Open.Time) {
330 hourRef.Open.Time = &defaultValue
331 }
332 if hourRef.Open == nil {
333 hourRef.Open = &model.Open{}
334 }
335 hours = append(hours, bsl.Hours{
336 Close: bsl.SiteHours{
337 Day: *hourRef.Close.Day,
338 Time: *hourRef.Close.Time,
339 },
340 Open: bsl.SiteHours{
341 Day: *hourRef.Open.Day,
342 Time: *hourRef.Open.Time,
343 },
344 })
345 }
346 }
347 for _, contact := range site.Contacts {
348 if contact != nil && contact.Details != nil {
349 contacts[contact.Identifier] = bsl.Contact{
350 Email: *contact.Details.Email,
351 ContactPerson: *contact.Details.ContactPerson,
352 PhoneNumber: *contact.Details.PhoneNumber,
353 PhoneNumberCountryCode: *contact.Details.PhoneNumberCountryCode,
354 }
355 }
356 }
357 return &bsl.BSLInfo{
358 ID: *site.ID,
359 SiteName: site.SiteName,
360 EnterpriseUnitName: site.EnterpriseUnitName,
361 Description: *site.Description,
362 OrganizationName: *site.OrganizationName,
363 ParentEnterpriseUnitID: *site.ParentEnterpriseUnitID,
364 ReferenceID: *site.ReferenceID,
365 DayParts: dayparts,
366 Coordinates: bsl.Coordinates{
367 Latitude: site.Coordinates.Latitude,
368 Longitude: site.Coordinates.Longitude,
369 },
370 Address: bsl.Address{
371 Street: *site.Address.Street,
372 City: *site.Address.City,
373 State: *site.Address.State,
374 Country: *site.Address.Country,
375 PostalCode: *site.Address.PostalCode,
376 },
377 Contact: bsl.Contact{
378 ContactPerson: *site.Contact.ContactPerson,
379 PhoneNumber: *site.Contact.PhoneNumber,
380 PhoneNumberCountryCode: *site.Contact.PhoneNumberCountryCode,
381 },
382 Contacts: contacts,
383 Currency: *site.Currency,
384 DeactivatedOn: *site.DeactivatedOn,
385 LastModifiedOn: *site.LastModifiedOn,
386 Locked: *site.Locked,
387 Status: site.Status,
388 CreatedOn: *site.CreatedOn,
389 TimeZone: *site.TimeZone,
390 CustomAttributeSets: customAttributeSets,
391 EnterpriseSettings: enterpriseSettings,
392 Hours: hours,
393 }
394 }
395
396
397 func ToBSLSite(site *model.Site, currentSite *types.BslSite) *types.BslSite {
398 updatedSite := types.BslSite{
399 SiteName: currentSite.SiteName,
400 Status: currentSite.Status,
401 EnterpriseUnitName: currentSite.EnterpriseUnitName,
402 Coordinates: currentSite.Coordinates,
403 Description: currentSite.Description,
404 ReferenceID: currentSite.ReferenceID,
405 TimeZone: currentSite.TimeZone,
406 ParentEnterpriseUnitID: currentSite.ParentEnterpriseUnitID,
407 Locked: currentSite.Locked,
408 Currency: currentSite.Currency,
409 Address: currentSite.Address,
410 Contact: currentSite.Contact,
411 Dayparts: currentSite.Dayparts,
412 CustomAttributeSets: currentSite.CustomAttributeSets,
413 Hours: currentSite.Hours,
414 Contacts: currentSite.Contacts,
415 }
416
417 if site.SiteName != nil {
418 updatedSite.SiteName = *site.SiteName
419 }
420 if site.Status != nil {
421 updatedSite.Status = *site.Status
422 }
423 if site.EnterpriseUnitName != nil {
424 updatedSite.EnterpriseUnitName = *site.EnterpriseUnitName
425 }
426 if site.Coordinates != nil {
427 updatedSite.Coordinates = types.Coordinates(*site.Coordinates)
428 }
429 if site.Description != nil {
430 if *site.Description == "" {
431 updatedSite.Description = nil
432 } else {
433 updatedSite.Description = site.Description
434 }
435 }
436 if site.ReferenceID != nil {
437 if *site.ReferenceID == "" {
438 updatedSite.ReferenceID = nil
439 } else {
440 updatedSite.ReferenceID = site.ReferenceID
441 }
442 }
443 if site.TimeZone != nil {
444 updatedSite.TimeZone = site.TimeZone
445 }
446 if site.ParentEnterpriseUnitID != nil {
447 updatedSite.ParentEnterpriseUnitID = site.ParentEnterpriseUnitID
448 }
449 if site.Locked != nil {
450 updatedSite.Locked = site.Locked
451 }
452 if site.Currency != nil {
453 updatedSite.Currency = site.Currency
454 }
455 if site.Address != nil {
456 updatedSite.Address = toTypeAddress(site.Address)
457 }
458 if site.Contact != nil {
459 updatedSite.Contact = toTypeContact(site.Contact)
460 }
461 if site.Dayparts != nil {
462 updatedSite.Dayparts = toTypeDayparts(site.Dayparts)
463 }
464 if site.CustomAttributeSets != nil {
465 updatedSite.CustomAttributeSets = toTypeCustomAttributeSets(site.CustomAttributeSets)
466 }
467 if site.Hours != nil {
468 updatedSite.Hours = toTypeHours(site.Hours)
469 }
470 for _, contact := range site.Contacts {
471 if contact != nil {
472 c := &types.Contact{}
473 if contact.Contact.ContactPerson != nil {
474 c.ContactPerson = contact.Contact.ContactPerson
475 }
476 if contact.Contact.Email != nil {
477 c.Email = contact.Contact.Email
478 }
479 if contact.Contact.PhoneNumber != nil {
480 c.PhoneNumber = contact.Contact.PhoneNumber
481 }
482 if contact.Contact.PhoneNumberCountryCode != nil {
483 c.PhoneNumberCountryCode = contact.Contact.PhoneNumberCountryCode
484 }
485 updatedSite.Contacts[contact.Identifier] = c
486 }
487 }
488 return &updatedSite
489 }
490
491
492 func toTypeContact(contact *model.ContactInput) *types.Contact {
493 return &types.Contact{
494 ContactPerson: contact.ContactPerson,
495 PhoneNumber: contact.PhoneNumber,
496 PhoneNumberCountryCode: contact.PhoneNumberCountryCode,
497 Email: contact.Email,
498 }
499 }
500
501
502 func toTypeAddress(address *model.AddressInput) *types.Address {
503 return &types.Address{
504 Street: address.Street,
505 City: address.City,
506 State: address.State,
507 Country: address.Country,
508 PostalCode: address.PostalCode,
509 }
510 }
511
512
513 func toTypeDayparts(dayparts []*model.DaypartsInput) []*types.Dayparts {
514 typeDayparts := make([]*types.Dayparts, 0)
515 defaultVal := ""
516 if len(dayparts) > 0 {
517 for _, daypart := range dayparts {
518 if utils.IsNullOrEmpty(daypart.Day) {
519 daypart.Day = &defaultVal
520 }
521 if utils.IsNullOrEmpty(daypart.Description) {
522 daypart.Description = &defaultVal
523 }
524 if utils.IsNullOrEmpty(daypart.Name) {
525 daypart.Name = &defaultVal
526 }
527 if utils.IsNullOrEmpty(daypart.StartTime) {
528 daypart.StartTime = &defaultVal
529 }
530 if utils.IsNullOrEmpty(daypart.EndTime) {
531 daypart.EndTime = &defaultVal
532 }
533 typeDayparts = append(typeDayparts, &types.Dayparts{
534 Day: daypart.Day,
535 Description: daypart.Description,
536 Name: daypart.Name,
537 StartTime: daypart.StartTime,
538 EndTime: daypart.EndTime,
539 })
540 }
541 }
542 return typeDayparts
543 }
544
545
546 func toTypeCustomAttributeSets(customAttributeSets []*model.CustomAttributeSetsInput) []*types.CustomAttributeSets {
547 typeCustomAttributeSets := make([]*types.CustomAttributeSets, 0)
548 defaultVal := ""
549 if len(customAttributeSets) > 0 {
550 for _, customAttributeSet := range customAttributeSets {
551 typeAttributes := make([]*types.Attributes, 0)
552 if len(customAttributeSet.Attributes) > 0 {
553 for _, customAttributeSetVal := range customAttributeSet.Attributes {
554 if utils.IsNullOrEmpty(customAttributeSetVal.Key) {
555 customAttributeSetVal.Key = &defaultVal
556 }
557 if utils.IsNullOrEmpty(customAttributeSetVal.Value) {
558 customAttributeSetVal.Value = &defaultVal
559 }
560 typeAttributes = append(typeAttributes, &types.Attributes{
561 Key: customAttributeSetVal.Key,
562 Value: customAttributeSetVal.Value,
563 })
564 }
565 }
566 typeCustomAttributeSets = append(typeCustomAttributeSets, &types.CustomAttributeSets{
567 TypeName: customAttributeSet.TypeName,
568 Attributes: typeAttributes,
569 })
570 }
571 }
572 return typeCustomAttributeSets
573 }
574
575
576 func toTypeHours(hours []*model.HoursInput) []*types.Hours {
577 typeHours := make([]*types.Hours, 0)
578 if len(hours) > 0 {
579 for _, hour := range hours {
580 hour := hour
581 typeHours = append(typeHours, &types.Hours{
582 Close: &types.Close{
583 Day: hour.Close.Day,
584 Time: hour.Close.Time,
585 },
586 Open: &types.Open{
587 Day: hour.Open.Day,
588 Time: hour.Open.Time,
589 },
590 })
591 }
592 }
593 return typeHours
594 }
595
View as plain text