diff --git a/controllers/workflow.go b/controllers/workflow.go index 8da2472..47e62c8 100644 --- a/controllers/workflow.go +++ b/controllers/workflow.go @@ -2,8 +2,12 @@ package controllers import ( "encoding/json" + "errors" + "time" oclib "cloud.o-forge.io/core/oc-lib" + w "cloud.o-forge.io/core/oc-lib/models/workflow" + tools "cloud.o-forge.io/core/oc-lib/tools" beego "github.com/beego/beego/v2/server/web" ) @@ -35,7 +39,9 @@ func (o *WorkflowController) Put() { var res map[string]interface{} id := o.Ctx.Input.Param(":id") json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res) - o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(oclib.WORKFLOW), res, id) + caller := tools.NewHTTPCaller("", "", "", oclib.GetPath(oclib.LibDataEnum(oclib.BOOKING))+"/oc/booking") + + o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(oclib.WORKFLOW), res, id, caller) o.ServeJSON() } @@ -47,7 +53,8 @@ func (o *WorkflowController) Put() { func (o *WorkflowController) Post() { var res map[string]interface{} json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res) - o.Data["json"] = oclib.StoreOne(oclib.LibDataEnum(oclib.WORKFLOW), res) + caller := tools.NewHTTPCaller("", "", "", oclib.GetPath(oclib.LibDataEnum(oclib.BOOKING))+"/oc/booking") + o.Data["json"] = oclib.StoreOne(oclib.LibDataEnum(oclib.WORKFLOW), res, caller) o.ServeJSON() } @@ -97,3 +104,40 @@ func (o *WorkflowController) Delete() { o.Data["json"] = oclib.DeleteOne(oclib.LibDataEnum(oclib.WORKFLOW), id) o.ServeJSON() } + +// @Title Check +// @Description check booking +// @Param start_date path string "the booking start date" format "2006-01-02T15:04:05" +// @Param end_date path string "the booking end date" format "2006-01-02T15:04:05" +// @Success 200 {object} models.object +// @router /check/:start_date/:end_date [get] +func (o *WorkflowController) Check() { + // store and return Id or post with UUID + date, err := time.Parse("2006-01-02T15:04:05", o.Ctx.Input.Param(":start_date")) + date2, err2 := time.Parse("2006-01-02T15:04:05", o.Ctx.Input.Param(":end_date")) + if err != nil || err2 != nil { + o.Data["json"] = map[string]interface{}{ + "data": map[string]interface{}{ + "is_available": false, + }, + "code": 400, + "error": errors.New("invalid date format"), + } + } else { + workflow := &w.Workflow{} + workflow.Schedule = &w.WorkflowSchedule{Start: &date, End: &date2} + isAvailable, err := workflow.CheckBooking(oclib.GetPath(oclib.LibDataEnum(oclib.BOOKING)) + "/oc/booking/check/:start_date/:end_date") + code := 200 + if !isAvailable { + code = 409 + } + o.Data["json"] = map[string]interface{}{ + "data": map[string]interface{}{ + "is_available": isAvailable, + }, + "code": code, + "error": err, + } + } + o.ServeJSON() +} diff --git a/controllers/workflow_resource.go b/controllers/workflow_resource.go deleted file mode 100644 index dfa49e9..0000000 --- a/controllers/workflow_resource.go +++ /dev/null @@ -1,83 +0,0 @@ -package controllers - -import ( - "encoding/json" - - oclib "cloud.o-forge.io/core/oc-lib" - beego "github.com/beego/beego/v2/server/web" -) - -// Operations about workflow -type WorkflowResourceController struct { - beego.Controller -} - -// @Title Search -// @Description search workspace -// @Param search path string true "the word search you want to get" -// @Success 200 {workspace} models.workspace -// @router /search/:search [get] -func (o *WorkflowResourceController) Search() { - // store and return Id or post with UUID - search := o.Ctx.Input.Param(":search") - o.Data["json"] = oclib.Search(nil, search, oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE)) - o.ServeJSON() -} - -// @Title GetAll -// @Description find workflow by workflowid -// @Success 200 {workflow} models.workflow -// @router / [get] -func (o *WorkflowResourceController) GetAll() { - o.Data["json"] = oclib.LoadAll(oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE)) - o.ServeJSON() -} - -// @Title Update -// @Description create workflows -// @Param id path string true "the workflowid you want to get" -// @Param body body models.workflow true "The workflow content" -// @Success 200 {object} models.workflow -// @router /:id [put] -func (o *WorkflowResourceController) Put() { - // store and return Id or post with UUID - var res map[string]interface{} - id := o.Ctx.Input.Param(":id") - json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res) - o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE), res, id) - o.ServeJSON() -} - -// @Title Create -// @Description create workflows -// @Param data body json true "body for data content (Json format)" -// @Success 200 {object} models.workflow -// @router / [post] -func (o *WorkflowResourceController) Post() { - var res map[string]interface{} - json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res) - o.Data["json"] = oclib.StoreOne(oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE), res) - o.ServeJSON() -} - -// @Title Get -// @Description find workflows -// @Param id path string true "the workflowid you want to get" -// @Success 200 {workflow} models.workflow -// @router /:id [get] -func (o *WorkflowResourceController) Get() { - id := o.Ctx.Input.Param(":id") - o.Data["json"] = oclib.LoadOne(oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE), id) - o.ServeJSON() -} - -// @Title Delete -// @Description delete the workflow -// @Param id path string true "The workflowId you want to delete" -// @Success 200 {string} delete success! -// @router /:id [delete] -func (o *WorkflowResourceController) Delete() { - id := o.Ctx.Input.Param(":id") - o.Data["json"] = oclib.DeleteOne(oclib.LibDataEnum(oclib.WORKFLOW_RESOURCE), id) - o.ServeJSON() -} diff --git a/docker_workflow.json b/docker_workflow.json index 5bf4004..68e4a35 100644 --- a/docker_workflow.json +++ b/docker_workflow.json @@ -1,4 +1,5 @@ { "MONGO_URL":"mongodb://mongo:27017/", - "MONGO_DATABASE":"DC_myDC" + "MONGO_DATABASE":"DC_myDC", + "BOOKING_PATH": ":8089" } \ No newline at end of file diff --git a/go.mod b/go.mod index 928bd9f..2b04b84 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( ) require ( - cloud.o-forge.io/core/oc-lib v0.0.0-20240807165025-9040d141c8ca // indirect + cloud.o-forge.io/core/oc-lib v0.0.0-20240812145458-6fe862a9b58c // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/beego/bee/v2 v2.1.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -57,6 +57,7 @@ require ( github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rs/zerolog v1.33.0 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -86,7 +87,7 @@ require ( golang.org/x/mod v0.19.0 // indirect golang.org/x/net v0.28.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect + golang.org/x/sys v0.24.0 // indirect golang.org/x/text v0.17.0 // indirect golang.org/x/tools v0.23.0 // indirect google.golang.org/protobuf v1.34.2 // indirect diff --git a/go.sum b/go.sum index 7c02c9d..f19b98a 100644 --- a/go.sum +++ b/go.sum @@ -140,6 +140,10 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20240806064253-29fcd0e34a72 h1:JWnarWFrCNWPr cloud.o-forge.io/core/oc-lib v0.0.0-20240806064253-29fcd0e34a72/go.mod h1:V5EL+NV2s9P1/BcFm3/icfLeBYVVMLl1Z0F0eecJZGo= cloud.o-forge.io/core/oc-lib v0.0.0-20240807165025-9040d141c8ca h1:Cc4kj+Aj2PRzC+1SFvwD/nichwWrerK2evwIn/KFoFk= cloud.o-forge.io/core/oc-lib v0.0.0-20240807165025-9040d141c8ca/go.mod h1:V5EL+NV2s9P1/BcFm3/icfLeBYVVMLl1Z0F0eecJZGo= +cloud.o-forge.io/core/oc-lib v0.0.0-20240812142802-e51377eeb31b h1:ofVT7etkOVW/B9KwJbL1dxbGCuwFwe2aDsMSGEB1Zds= +cloud.o-forge.io/core/oc-lib v0.0.0-20240812142802-e51377eeb31b/go.mod h1:V5EL+NV2s9P1/BcFm3/icfLeBYVVMLl1Z0F0eecJZGo= +cloud.o-forge.io/core/oc-lib v0.0.0-20240812145458-6fe862a9b58c h1:5zrkYMNALJfx+S1n8CxUNkpWq4bsSTDm5PG2hbqSg5k= +cloud.o-forge.io/core/oc-lib v0.0.0-20240812145458-6fe862a9b58c/go.mod h1:V5EL+NV2s9P1/BcFm3/icfLeBYVVMLl1Z0F0eecJZGo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -448,6 +452,8 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -665,6 +671,8 @@ golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/main.go b/main.go index 34e87bf..f63eeb3 100644 --- a/main.go +++ b/main.go @@ -37,6 +37,7 @@ func main() { o.GetStringDefault("MONGO_DATABASE", "DC_myDC"), ) oclib.Init("oc-workflow") + oclib.AddPath(oclib.LibDataEnum(oclib.BOOKING), o.GetStringDefault("BOOKING_URL", ":8089")) // Normal beego init //if beego.BConfig.RunMode == "dev" { beego.BConfig.WebConfig.DirectoryIndex = true diff --git a/routers/router.go b/routers/router.go index f6d0eed..52b7bee 100644 --- a/routers/router.go +++ b/routers/router.go @@ -20,11 +20,6 @@ func init() { &controllers.WorkflowController{}, ), ), - beego.NSNamespace("/workflow/resource", - beego.NSInclude( - &controllers.WorkflowResourceController{}, - ), - ), beego.NSNamespace("/version", beego.NSInclude( &controllers.VersionController{},