From c18fbc2f6f695aeeb79979194a3e7effee74fe28 Mon Sep 17 00:00:00 2001 From: sarifuddin <sarifuddin@kanosolution.com> Date: Thu, 1 Sep 2022 09:27:48 +0700 Subject: [PATCH] add sync ticket kind --- .gitignore | 130 +++++++++++++++++++++++++++++-- pkg/model/ticket-kind.go | 40 ++++++++++ pkg/repository/base.go | 10 ++- pkg/repository/ticket_kind.go | 18 +++++ pkg/services/sync/base.go | 1 + pkg/services/sync/ticket-kind.go | 103 ++++++++++++++++++++++++ pkg/services/sync/ticket.go | 6 -- pkg/type/process/kind.go | 5 +- 8 files changed, 293 insertions(+), 20 deletions(-) create mode 100644 pkg/model/ticket-kind.go create mode 100644 pkg/repository/ticket_kind.go create mode 100644 pkg/services/sync/ticket-kind.go diff --git a/.gitignore b/.gitignore index 54f16d3..5890fed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,123 @@ -cmd/app/__debug_bin -release/ -cmd/app/static/* -cmd/app/__debug_bin.exe -cmd/etl/__debug_bin.exe -.ignored/ -.vscode/*.log -config/*.yml +# Workspace +config/app.yaml +config/app.yml +config/caddyfile +__debug_bin +__debug_bin.exe +NUL +services/iam/sessions +services/iam/sessions/* +services/asset/files +services/asset/files/* +release +scripts/**/*.out +go.mod.backup + +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +/logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# Nuxt generate +dist + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# IDE / Editor +.idea + +# Service worker +sw.* + +# macOS +.DS_Store + +# Vim swap files +*.swp + +ignored/ +tools/playground/** +!tools/playground/.keep +tools/migration/data/arbitrary-test.go +services/account/account.exe +services/asset/asset.exe +services/config/config.exe +services/event/event.exe +services/iam/iam.exe +services/notification/notification.exe +services/payment/payment.exe +sessions/5ecbda36-324c-4c86-90b8-23d73f823c19.json +sessions/8b98f80e-955b-4cc1-9e11-9d1763b02058.json +sessions/9f8a6a05-80ad-42d2-9e15-41f31c31a62b.json +startdependency.bat +startservice.bat diff --git a/pkg/model/ticket-kind.go b/pkg/model/ticket-kind.go new file mode 100644 index 0000000..5038f2d --- /dev/null +++ b/pkg/model/ticket-kind.go @@ -0,0 +1,40 @@ +package model + +import ( + "fmt" + + "git.kanosolution.net/kano/dbflex" + "git.kanosolution.net/kano/dbflex/orm" +) + +type TicketKindMaster struct { + orm.DataModelBase `json:"-"` + ID string `json:"_id"` + EventID string `json:"event_id"` + Name string `json:"name"` + Description string `json:"description"` + Visibility string `json:"visibility"` + Price float64 `json:"price"` +} + +func (o *TicketKindMaster) TableName() string { + return "ticket_kinds" +} + +func (o *TicketKindMaster) GetID(_ dbflex.IConnection) ([]string, []interface{}) { + return []string{"_id"}, []interface{}{o.ID} +} + +func (o *TicketKindMaster) SetID(keys ...interface{}) { + if len(keys) > 0 { + o.ID = keys[0].(string) + } +} + +func (o *TicketKindMaster) PreSave(dbflex.IConnection) error { + if o.ID == "" { + return fmt.Errorf("ID of ticket kind model not allowed null/empty") + } + + return nil +} diff --git a/pkg/repository/base.go b/pkg/repository/base.go index 67ca249..e215db2 100644 --- a/pkg/repository/base.go +++ b/pkg/repository/base.go @@ -11,10 +11,11 @@ var ( Hub *datahub.Hub //repository list - TicketRepo TicketRepository - CheckinRepo CheckinRepository - ChecklogRepo ChecklogRepository - ProcessRepo ProcessLockRepository + TicketRepo TicketRepository + CheckinRepo CheckinRepository + ChecklogRepo ChecklogRepository + ProcessRepo ProcessLockRepository + TicketKindRepo TicketKindRepository ) type RepositoryInitParam struct { @@ -37,6 +38,7 @@ func SetMGORepository() { CheckinRepo = &CheckinMgo{} ChecklogRepo = &ChecklogMgo{} ProcessRepo = &ProcessLockMgo{} + TicketKindRepo = &TicketKindMgo{} } type Paggination struct { diff --git a/pkg/repository/ticket_kind.go b/pkg/repository/ticket_kind.go new file mode 100644 index 0000000..1837ebe --- /dev/null +++ b/pkg/repository/ticket_kind.go @@ -0,0 +1,18 @@ +package repository + +import "git.kanosolution.net/expo/ticket-scanner/pkg/model" + +type TicketKindRepository interface { + Save(ticketKind *model.TicketKindMaster) error +} + +type TicketKindMgo struct{} + +func (o *TicketKindMgo) Save(ticketKind *model.TicketKindMaster) error { + e := Hub.Save(ticketKind) + if e != nil { + return e + } + + return nil +} diff --git a/pkg/services/sync/base.go b/pkg/services/sync/base.go index 2bc8a49..fbf4e22 100644 --- a/pkg/services/sync/base.go +++ b/pkg/services/sync/base.go @@ -19,6 +19,7 @@ func StartScheduler(s *kaos.Service, minutes int) { etlProcess := []IETL{ NewTicket(nil), NewCheckin(nil), + NewTicketKind(nil), } scheduler := cron.New(cron.WithChain( diff --git a/pkg/services/sync/ticket-kind.go b/pkg/services/sync/ticket-kind.go new file mode 100644 index 0000000..ed6c008 --- /dev/null +++ b/pkg/services/sync/ticket-kind.go @@ -0,0 +1,103 @@ +package sync + +import ( + "git.kanosolution.net/expo/ticket-scanner/pkg/helper" + "git.kanosolution.net/expo/ticket-scanner/pkg/lib" + "git.kanosolution.net/expo/ticket-scanner/pkg/lib/logger" + "git.kanosolution.net/expo/ticket-scanner/pkg/lib/rest" + "git.kanosolution.net/expo/ticket-scanner/pkg/model" + "git.kanosolution.net/expo/ticket-scanner/pkg/repository" + "git.kanosolution.net/expo/ticket-scanner/pkg/services" + "git.kanosolution.net/expo/ticket-scanner/pkg/type/process" + "github.com/eaciit/toolkit" +) + +type TicketKind struct { + log *toolkit.LogEngine + syncKind process.Kind +} + +func NewTicketKind(log *toolkit.LogEngine) *TicketKind { + ticketKind := &TicketKind{ + log: log, + syncKind: process.SyncTicketKind, + } + + if ticketKind.log == nil { + ticketKind.log = logger.LogWithPrefix(ticketKind.Tag()) + } + + return ticketKind +} + +type TicketKindSyncResponse struct { + Data []model.TicketKindMaster `json:"data"` + Total int `json:"total"` +} + +func (o *TicketKind) Sync(eventID string) error { + //get all ticket kind by event id + processLock := services.NewProcessLock(eventID, o.syncKind) + if true == processLock.IsRunning() { + processLock.UpdateStatus(process.Skip, "Proses sync ticket masih berjalan, mohon tunggu beberapa saat lagi") + return nil + } + + var e error + e = processLock.Start() + if e != nil { + return e + } + + defer func() { + err := processLock.Stop(e) + if err != nil { + o.log.Error(err.Error()) + } + + return + }() + + var totalTicketKindSync int + e = helper.PanicHandler(func() error { + o.log.Info("Start Sync") + defer func() { + o.log.Infof("End Sync with total data: %d", totalTicketKindSync) + }() + + //get count of data by last refresh date + baseURL := lib.AppConfig().Data.GetString("evensio_base_url") + rest := rest.New(baseURL) + + ticketKindGetsParam := toolkit.M{ + "event_id": eventID, + } + + res := new(TicketKindSyncResponse) + output, e := rest.Post("/ticket/scanner/getsticketkind", ticketKindGetsParam, res) + + if e != nil { + o.log.Errorf("Failed when gets ticket kind with response %s and error: %s", string(output), e.Error()) + return e + } + + //starting store ticket kind to internal db ticket scanner + for _, ticketKind := range res.Data { + e = repository.TicketKindRepo.Save(&ticketKind) + if e != nil { + return e + } + } + return nil + }, *o.log) + + if e != nil { + return e + } + + return nil +} + +func (o *TicketKind) Tag() string { + return "ticket_kind_sync" +} diff --git a/pkg/services/sync/ticket.go b/pkg/services/sync/ticket.go index b9ccdbf..0d3e74f 100644 --- a/pkg/services/sync/ticket.go +++ b/pkg/services/sync/ticket.go @@ -135,12 +135,6 @@ func (o *Ticket) Sync(eventID string) error { } } - return nil - - if e != nil { - return e - } - iteration++ if iteration > fetchIteration { break diff --git a/pkg/type/process/kind.go b/pkg/type/process/kind.go index 10ec717..4e75caa 100644 --- a/pkg/type/process/kind.go +++ b/pkg/type/process/kind.go @@ -3,6 +3,7 @@ package process type Kind string const ( - SyncTicket Kind = "sync_ticket" - SyncCheckin Kind = "sync_checkin" + SyncTicket Kind = "sync_ticket" + SyncTicketKind Kind = "sync_ticket_kind" + SyncCheckin Kind = "sync_checkin" ) -- GitLab