diff --git a/modules/grouptasks/grouptasks.go b/modules/grouptasks/grouptasks.go index 9df4efb..4008a6c 100644 --- a/modules/grouptasks/grouptasks.go +++ b/modules/grouptasks/grouptasks.go @@ -855,6 +855,36 @@ func GetAllGroupTasksSteps() []structs.GroupTaskSteps { return groupTaskStepsLogs } +func GetGroupTaskSteps(groupTaskId string) structs.GetGroupTaskStepsResponse { + var groupTask structs.GroupTasks + + database.DB.Where("id = ?", groupTaskId).Find(&groupTask) + + var groupTaskSteps []structs.GroupTaskSteps + + database.DB.Where("group_tasks_id = ?", groupTaskId).Find(&groupTaskSteps) + + lockedGroupTaskSteps := cache.GetLockedGroupTaskSteps() + groupTaskStepsInputs := cache.GetGroupTaskStepsInputs() + + for i, groupTaskStep := range groupTaskSteps { + if groupTaskStep.Status == utils.GroupTasksStatusInputRequired { + groupTaskSteps[i].Inputs = cache.GetGroupTaskStepsInputsValue(groupTaskStepsInputs, groupTaskStep.GroupTasksId, groupTaskStep.Step) + + for _, lockedGroupTaskStep := range lockedGroupTaskSteps { + if groupTaskStep.GroupTasksId == lockedGroupTaskStep.GroupTaskId { + groupTaskSteps[i].LockedByUserId = lockedGroupTaskStep.LockedByUserId + } + } + } + } + + return structs.GetGroupTaskStepsResponse{ + GroupTask: groupTask, + GroupTaskSteps: groupTaskSteps, + } +} + func GetCategoryGroupTaskByCategoryAndGroupId(category string, groupId string) structs.Group { for _, categoryGroup := range cache.GetCategoryGroups() { if categoryGroup.Category == category { diff --git a/modules/structs/grouptasks.go b/modules/structs/grouptasks.go index 65ad6df..599aed7 100644 --- a/modules/structs/grouptasks.go +++ b/modules/structs/grouptasks.go @@ -23,6 +23,7 @@ type GroupTasks struct { RememberId string `gorm:"-"` // used by the web client who requested this to open the modal after the backend sent the NewGroupTaskStarted message } +// swagger:model GroupTaskSteps type GroupTaskSteps struct { Id string GroupTasksId string @@ -114,3 +115,15 @@ type GroupTasksResponse struct { GroupTasks []GroupTasks TotalPages int } + +// swagger:model GroupTasksStepsRequest +type GroupTaskStepsRequest struct { + Category string + GroupTaskId string +} + +// swagger:model GetGroupTaskStepsResponse +type GetGroupTaskStepsResponse struct { + GroupTask GroupTasks + GroupTaskSteps []GroupTaskSteps +} diff --git a/public/swagger/swagger.json b/public/swagger/swagger.json index 370d5ec..9a801ec 100644 --- a/public/swagger/swagger.json +++ b/public/swagger/swagger.json @@ -275,42 +275,6 @@ } } }, - "/grouptasks": { - "get": { - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "grouptask" - ], - "summary": "Get all group tasks", - "operationId": "grouptaskGetGroupTasks", - "parameters": [ - { - "description": "You can create a new api key in your user profile", - "name": "X-Api-Key", - "in": "header" - } - ], - "responses": { - "200": { - "description": "All group tasks", - "schema": { - "$ref": "#/definitions/GroupTasksResponse" - } - }, - "401": { - "description": "No permissions" - }, - "500": { - "description": "Failed to get group tasks" - } - } - } - }, "/grouptasks/start": { "post": { "consumes": [ @@ -320,7 +284,7 @@ "application/json" ], "tags": [ - "grouptask" + "grouptasks" ], "summary": "Start a new group task", "operationId": "grouptaskStartGroupTask", @@ -357,6 +321,96 @@ } } }, + "/grouptasks/{category}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "grouptasks" + ], + "summary": "Get group tasks", + "operationId": "grouptaskGetGroupTasks", + "parameters": [ + { + "description": "Category of the group tasks", + "name": "category", + "in": "query", + "required": true + }, + { + "description": "Page number", + "name": "page", + "in": "query" + }, + { + "description": "Number of items per page", + "name": "perPage", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Group tasks", + "schema": { + "$ref": "#/definitions/GroupTasksResponse" + } + }, + "400": { + "description": "Invalid request query" + }, + "401": { + "description": "No permissions" + }, + "500": { + "description": "Failed to get group tasks" + } + } + } + }, + "/grouptasks/{category}/steps/{groupTaskId}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "grouptasks" + ], + "summary": "Get group task steps", + "operationId": "grouptaskGetGroupTaskSteps", + "parameters": [ + { + "description": "Category of the group tasks", + "name": "category", + "in": "query", + "required": true + }, + { + "description": "Id of the group task", + "name": "groupTaskId", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Group task steps", + "schema": { + "$ref": "#/definitions/GroupTaskSteps" + } + }, + "400": { + "description": "Invalid request query" + }, + "401": { + "description": "No permissions" + }, + "500": { + "description": "Failed to get group task steps" + } + } + } + }, "/user/auth/login": { "post": { "consumes": [ @@ -800,6 +854,10 @@ "Status": { "type": "integer", "format": "int64" + }, + "TotalPages": { + "type": "integer", + "format": "int64" } }, "x-go-package": "jannex/admin-dashboard-backend/modules/structs" @@ -950,11 +1008,8 @@ "GroupTasksResponse": { "type": "object", "properties": { - "CategoryGroups": { - "type": "array", - "items": { - "$ref": "#/definitions/CategoryGroup" - } + "CategoryGroup": { + "$ref": "#/definitions/CategoryGroup" }, "GroupTasks": { "type": "array", @@ -962,15 +1017,26 @@ "$ref": "#/definitions/GroupTasks" } }, - "GroupTasksSteps": { - "type": "array", - "items": { - "$ref": "#/definitions/GroupTaskSteps" - } + "TotalPages": { + "type": "integer", + "format": "int64" } }, "x-go-package": "jannex/admin-dashboard-backend/modules/structs" }, + "GroupTasksStepsRequest": { + "type": "object", + "properties": { + "Category": { + "type": "string" + }, + "GroupTaskId": { + "type": "string" + } + }, + "x-go-name": "GroupTaskStepsRequest", + "x-go-package": "jannex/admin-dashboard-backend/modules/structs" + }, "Role": { "type": "object", "properties": { @@ -1104,7 +1170,7 @@ "UserInfoResponse": { "type": "object", "properties": { - "AvailableGroupTasks": { + "AvailableCategoryGroups": { "type": "array", "items": { "type": "string" diff --git a/routers/router/api/v1/grouptasks/grouptasks.go b/routers/router/api/v1/grouptasks/grouptasks.go index 52efc4b..1108af0 100644 --- a/routers/router/api/v1/grouptasks/grouptasks.go +++ b/routers/router/api/v1/grouptasks/grouptasks.go @@ -13,21 +13,52 @@ import ( ) func GetGroupTasks(c *fiber.Ctx) error { + // swagger:operation GET /grouptasks/{category} grouptasks grouptaskGetGroupTasks + // --- + // summary: Get group tasks + // produces: + // - application/json + // parameters: + // - name: category + // in: query + // description: Category of the group tasks + // required: true + // - name: page + // in: query + // description: Page number + // required: false + // - name: perPage + // in: query + // description: Number of items per page + // required: false + // responses: + // '200': + // description: Group tasks + // schema: + // "$ref": "#/definitions/GroupTasksResponse" + // '400': + // description: Invalid request query + // '401': + // description: No permissions + // '500': + // description: Failed to get group tasks + var params structs.GroupTasksRequest if err := c.ParamsParser(¶ms); err != nil { return c.SendStatus(fiber.StatusBadRequest) } + if !socketclients.HasXYPermission(c.Locals("userId").(string), utils.PermissionGroupTasksOverviewXYView, params.Category) { + return c.SendStatus(fiber.StatusUnauthorized) + } + var query structs.PageQuery if err := c.QueryParser(&query); err != nil { return c.SendStatus(fiber.StatusBadRequest) } - log.Info().Msgf("params: %v", params) - log.Info().Msgf("query: %v", query) - var categoryGroup structs.CategoryGroup for _, cGroup := range cache.GetCategoryGroups() { @@ -43,6 +74,46 @@ func GetGroupTasks(c *fiber.Ctx) error { }) } +func GetGroupTaskSteps(c *fiber.Ctx) error { + // swagger:operation GET /grouptasks/{category}/steps/{groupTaskId} grouptasks grouptaskGetGroupTaskSteps + // --- + // summary: Get group task steps + // produces: + // - application/json + // parameters: + // - name: category + // in: query + // description: Category of the group tasks + // required: true + // - name: groupTaskId + // in: query + // description: Id of the group task + // required: true + // responses: + // '200': + // description: Group task steps + // schema: + // "$ref": "#/definitions/GroupTaskSteps" + // '400': + // description: Invalid request query + // '401': + // description: No permissions + // '500': + // description: Failed to get group task steps + + var params structs.GroupTaskStepsRequest + + if err := c.ParamsParser(¶ms); err != nil { + return c.SendStatus(fiber.StatusBadRequest) + } + + if !socketclients.HasXYPermission(c.Locals("userId").(string), utils.PermissionGroupTasksOverviewXYView, params.Category) { + return c.SendStatus(fiber.StatusUnauthorized) + } + + return c.JSON(grouptasks.GetGroupTaskSteps(params.GroupTaskId)) +} + func StartGroupTask(c *fiber.Ctx) error { // swagger:operation POST /grouptasks/start grouptasks grouptaskStartGroupTask // --- diff --git a/routers/router/router.go b/routers/router/router.go index 2ab79f9..4701c76 100644 --- a/routers/router/router.go +++ b/routers/router/router.go @@ -41,9 +41,10 @@ func SetupRoutes(app *fiber.App) { l := v1.Group("/log") l.Get("/", requestAccessValidation, log.GetSystemLog) - g := v1.Group("/grouptasks") - g.Get("/:category", requestAccessValidation, grouptasks.GetGroupTasks) - g.Post("/start", requestAccessValidation, grouptasks.StartGroupTask) + gs := v1.Group("/grouptasks") + gs.Get("/:category", requestAccessValidation, grouptasks.GetGroupTasks) + gs.Post("/start", requestAccessValidation, grouptasks.StartGroupTask) + gs.Get(":category/steps/:groupTaskId", requestAccessValidation, grouptasks.GetGroupTaskSteps) e := v1.Group("/equipment") e.Get("/documentations/:stockItemId", requestAccessValidation, equipment.GetEquipmentDocumentations)