Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func (ls *LessonService) UpdateLesson(ctx context.Context, req *lspb.UpdateLesso
"params": req,
}).Info("Updating Lesson by ID")

md, ok := metadata.FromIncomingContext(ctx)
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, utils.ErrMissingOrganization().ToGRPCStatus()
}
Expand Down Expand Up @@ -59,7 +59,7 @@ func (ls *LessonService) UpdateLesson(ctx context.Context, req *lspb.UpdateLesso
}

args := repo.GetModuleByIDWithTenantParams{
ModuleID: global.ConvertStringToGoogleUUID(req.ModuleId),
ModuleID: global.ConvertStringToGoogleUUID(req.ModuleId),
Namespace: orgName,
}

Expand Down
19 changes: 16 additions & 3 deletions backend/lms-main-system/app/rpc/module/rpc_delete_modules.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"database/sql"
"errors"
"strings"
"time"

"github.com/multi-tenants-cms-golang/lms-sys/internal/convert/module"
Expand All @@ -19,7 +20,7 @@ import (
func (ms *ModulesService) DeleteModules(ctx context.Context, req *mpb.DeleteModulesRequest) (*mpb.DeleteModulesResponse, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, utils.ErrMissingOrganization().ToGRPCStatus()
return nil, status.Error(codes.InvalidArgument, "failed to retrieve metadata")
}

orgValues := md.Get("x-organisation")
Expand All @@ -29,16 +30,28 @@ func (ms *ModulesService) DeleteModules(ctx context.Context, req *mpb.DeleteModu

orgName := orgValues[0]

headerValues := md.Get("x-module-ids")
if len(headerValues) == 0 {
return nil, status.Error(codes.InvalidArgument, "module-ids header required")
}

var module_ids []string
if len(headerValues) == 1 {
module_ids = strings.Split(headerValues[0], ",")
} else {
module_ids = headerValues
}

ms.logger.WithFields(logrus.Fields{
"method": "DeleteModules",
"module_ids": req.Ids,
"module_ids": strings.Join(module_ids, ", "),
"org": orgName,
}).Info("Deleting modules")

dbCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

for _, id := range req.Ids {
for _, id := range module_ids {
if id == "" {
return nil, status.Error(codes.InvalidArgument, "module id is required")
}
Expand Down
2 changes: 2 additions & 0 deletions backend/lms-main-system/doc/statik/statik.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

85 changes: 41 additions & 44 deletions backend/lms-main-system/doc/swagger/api.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,7 @@
]
}
},
"/lms/v1/module": {
"/lms/v1/modules": {
"get": {
"summary": "Get all module",
"description": "List/Get all module",
Expand All @@ -657,8 +657,8 @@
]
},
"delete": {
"summary": "Delete module",
"description": "Delete single or multiple module",
"summary": "Delete module(s)",
"description": "Delete single or multiple modules",
"operationId": "ModuleService_DeleteModules",
"responses": {
"200": {
Expand All @@ -675,21 +675,18 @@
}
},
"parameters": [
{
"name": "ids",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "forceDelete",
"in": "query",
"required": false,
"type": "boolean"
},
{
"name": "X-Module-Ids",
"description": "List of module ids to delete",
"in": "header",
"required": true,
"type": "string"
}
],
"tags": [
Expand Down Expand Up @@ -729,16 +726,14 @@
]
}
},
"/lms/v1/module/{moduleId}": {
"/lms/v1/modules/lessons": {
"get": {
"summary": "Get a module",
"description": "Get a module",
"operationId": "ModuleService_GetModule",
"operationId": "LessonService_GetAllLessonsByModuleId",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/modulesGetModuleResponse"
"$ref": "#/definitions/lessonGetLessonsByModuleIdResponse"
}
},
"default": {
Expand All @@ -751,24 +746,26 @@
"parameters": [
{
"name": "moduleId",
"in": "path",
"required": true,
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"ModuleService"
"LessonService"
]
},
"put": {
"summary": "Update module",
"description": "Update an existing module",
"operationId": "ModuleService_UpdateModule",
}
},
"/lms/v1/modules/{moduleId}": {
"get": {
"summary": "Get a module",
"description": "Get a module",
"operationId": "ModuleService_GetModule",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/modulesUpdateModuleResponse"
"$ref": "#/definitions/modulesGetModuleResponse"
}
},
"default": {
Expand All @@ -784,29 +781,21 @@
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/ModuleServiceUpdateModuleBody"
}
}
],
"tags": [
"ModuleService"
]
}
},
"/lms/v1/modules/lessons": {
"get": {
"operationId": "LessonService_GetAllLessonsByModuleId",
},
"put": {
"summary": "Update module",
"description": "Update an existing module",
"operationId": "ModuleService_UpdateModule",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lessonGetLessonsByModuleIdResponse"
"$ref": "#/definitions/modulesUpdateModuleResponse"
}
},
"default": {
Expand All @@ -819,13 +808,21 @@
"parameters": [
{
"name": "moduleId",
"in": "query",
"required": false,
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/ModuleServiceUpdateModuleBody"
}
}
],
"tags": [
"LessonService"
"ModuleService"
]
}
},
Expand Down
11 changes: 3 additions & 8 deletions backend/lms-main-system/proto/modules/rpc_delete_modules.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ package lms.modules;

option go_package = "github.com/multi-tenant-cms-golang/lms-sys/protogen/module";

message DeleteModulesRequest {
repeated string ids = 1;
bool force_delete = 2;
}

message DeleteModulesResponse {
string message = 1;
}
message DeleteModulesRequest { bool force_delete = 1; }

message DeleteModulesResponse { string message = 1; }
22 changes: 15 additions & 7 deletions backend/lms-main-system/proto/modules/service.module.proto
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import "modules/rpc_update_module.proto";
service ModuleService {
rpc CreateModule(CreateModuleRequest) returns (CreateModuleResponse) {
option (google.api.http) = {
post: "/lms/v1/module";
post: "/lms/v1/modules";
body: "*";
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
Expand All @@ -28,7 +28,7 @@ service ModuleService {

rpc UpdateModule(UpdateModuleRequest) returns (UpdateModuleResponse) {
option (google.api.http) = {
put: "/lms/v1/module/{module_id}";
put: "/lms/v1/modules/{module_id}";
body: "*";
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
Expand All @@ -39,17 +39,25 @@ service ModuleService {

rpc DeleteModules(DeleteModulesRequest) returns (DeleteModulesResponse) {
option (google.api.http) = {
delete: "/lms/v1/module";
delete: "/lms/v1/modules";
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
description: "Delete single or multiple module";
summary: "Delete module";
description: "Delete single or multiple modules";
summary: "Delete module(s)";
parameters: {
headers: {
name: "X-Module-Ids"
required: true
type: STRING
description: "List of module ids to delete"
}
}
};
}

rpc ListModules(google.protobuf.Empty) returns (ListModulesResponse) {
option (google.api.http) = {
get: "/lms/v1/module";
get: "/lms/v1/modules";
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
description: "List/Get all module";
Expand All @@ -59,7 +67,7 @@ service ModuleService {

rpc GetModule(GetModuleRequest) returns (GetModuleResponse) {
option (google.api.http) = {
get: "/lms/v1/module/{module_id}";
get: "/lms/v1/modules/{module_id}";
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
description: "Get a module";
Expand Down
Loading