Spaces:
Sleeping
Sleeping
Commit ·
7c23748
1
Parent(s): 930b7ff
Deploy files from GitHub repository
Browse files- Quzuu_API_Collection.postman_collection.json +34 -0
- controllers/repair_controller.go +36 -0
- models/dto/repair_dto.go +5 -0
- provider/controller_provider.go +8 -0
- provider/repositories_provider.go +8 -0
- provider/services_provider.go +8 -0
- repositories/repair_repository.go +34 -0
- router/super_admin_router.go +6 -0
- services/repair_service.go +23 -0
Quzuu_API_Collection.postman_collection.json
CHANGED
|
@@ -5227,6 +5227,40 @@
|
|
| 5227 |
}
|
| 5228 |
]
|
| 5229 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5230 |
{
|
| 5231 |
"name": "Authentication Management",
|
| 5232 |
"item": [
|
|
|
|
| 5227 |
}
|
| 5228 |
]
|
| 5229 |
},
|
| 5230 |
+
{
|
| 5231 |
+
"name": "Repair",
|
| 5232 |
+
"item": [
|
| 5233 |
+
{
|
| 5234 |
+
"name": "Repair Question Storage Path",
|
| 5235 |
+
"request": {
|
| 5236 |
+
"method": "POST",
|
| 5237 |
+
"header": [
|
| 5238 |
+
{
|
| 5239 |
+
"key": "Authorization",
|
| 5240 |
+
"value": "Bearer {{access_token}}",
|
| 5241 |
+
"type": "text"
|
| 5242 |
+
}
|
| 5243 |
+
],
|
| 5244 |
+
"url": {
|
| 5245 |
+
"raw": "{{base_url}}/api/v1/super-admin/repair/question/storage_path",
|
| 5246 |
+
"host": [
|
| 5247 |
+
"{{base_url}}"
|
| 5248 |
+
],
|
| 5249 |
+
"path": [
|
| 5250 |
+
"api",
|
| 5251 |
+
"v1",
|
| 5252 |
+
"super-admin",
|
| 5253 |
+
"repair",
|
| 5254 |
+
"question",
|
| 5255 |
+
"storage_path"
|
| 5256 |
+
]
|
| 5257 |
+
},
|
| 5258 |
+
"description": "Repair question storage path placeholders (super admin)"
|
| 5259 |
+
},
|
| 5260 |
+
"response": []
|
| 5261 |
+
}
|
| 5262 |
+
]
|
| 5263 |
+
},
|
| 5264 |
{
|
| 5265 |
"name": "Authentication Management",
|
| 5266 |
"item": [
|
controllers/repair_controller.go
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package controllers
|
| 2 |
+
|
| 3 |
+
import (
|
| 4 |
+
"abdanhafidz.com/go-boilerplate/models/dto"
|
| 5 |
+
"abdanhafidz.com/go-boilerplate/services"
|
| 6 |
+
"github.com/gin-gonic/gin"
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
type RepairController interface {
|
| 10 |
+
RepairQuestionStoragePath(ctx *gin.Context)
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
type repairController struct {
|
| 14 |
+
repairService services.RepairService
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
func NewRepairController(repairService services.RepairService) RepairController {
|
| 18 |
+
return &repairController{repairService: repairService}
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
// RepairQuestionStoragePath godoc
|
| 22 |
+
// @Summary Super Admin: Repair Question Storage Path
|
| 23 |
+
// @Description Replace @@PLUGINFILE@@ placeholders in questions with the storage URL and problem set ID
|
| 24 |
+
// @Tags Super Admin Repair
|
| 25 |
+
// @Accept json
|
| 26 |
+
// @Produce json
|
| 27 |
+
// @Security BearerAuth
|
| 28 |
+
// @Success 200 {object} dto.SuccessResponse[dto.RepairQuestionStoragePathResponse]
|
| 29 |
+
// @Failure 401 {object} dto.ErrorResponse
|
| 30 |
+
// @Failure 403 {object} dto.ErrorResponse
|
| 31 |
+
// @Failure 500 {object} dto.ErrorResponse
|
| 32 |
+
// @Router /api/v1/super-admin/repair/question/storage_path [post]
|
| 33 |
+
func (c *repairController) RepairQuestionStoragePath(ctx *gin.Context) {
|
| 34 |
+
updatedRows, err := c.repairService.RepairQuestionStoragePath(ctx.Request.Context())
|
| 35 |
+
ResponseJSON(ctx, gin.H{}, dto.RepairQuestionStoragePathResponse{UpdatedRows: updatedRows}, err)
|
| 36 |
+
}
|
models/dto/repair_dto.go
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package dto
|
| 2 |
+
|
| 3 |
+
type RepairQuestionStoragePathResponse struct {
|
| 4 |
+
UpdatedRows int64 `json:"updated_rows"`
|
| 5 |
+
}
|
provider/controller_provider.go
CHANGED
|
@@ -22,6 +22,7 @@ type ControllerProvider interface {
|
|
| 22 |
ProvideUploadController() controllers.UploadController
|
| 23 |
ProvideUserController() controllers.UserController
|
| 24 |
ProvideSuperAdminInjectController() controllers.SuperAdminInjectController
|
|
|
|
| 25 |
}
|
| 26 |
|
| 27 |
type controllerProvider struct {
|
|
@@ -44,6 +45,7 @@ type controllerProvider struct {
|
|
| 44 |
uploadController controllers.UploadController
|
| 45 |
userController controllers.UserController
|
| 46 |
superAdminInjectController controllers.SuperAdminInjectController
|
|
|
|
| 47 |
}
|
| 48 |
|
| 49 |
func NewControllerProvider(servicesProvider ServicesProvider) ControllerProvider {
|
|
@@ -71,6 +73,7 @@ func NewControllerProvider(servicesProvider ServicesProvider) ControllerProvider
|
|
| 71 |
uploadController := controllers.NewUploadController(servicesProvider.ProvideUploadService())
|
| 72 |
userController := controllers.NewUserController(servicesProvider.ProvideAccountService())
|
| 73 |
superAdminInjectController := controllers.NewSuperAdminInjectController(servicesProvider.ProvideProblemSetService())
|
|
|
|
| 74 |
return &controllerProvider{
|
| 75 |
adminAcademyController: adminAcademyController,
|
| 76 |
adminEventController: adminEventController,
|
|
@@ -91,6 +94,7 @@ func NewControllerProvider(servicesProvider ServicesProvider) ControllerProvider
|
|
| 91 |
uploadController: uploadController,
|
| 92 |
userController: userController,
|
| 93 |
superAdminInjectController: superAdminInjectController,
|
|
|
|
| 94 |
}
|
| 95 |
}
|
| 96 |
|
|
@@ -171,3 +175,7 @@ func (c *controllerProvider) ProvideUserController() controllers.UserController
|
|
| 171 |
func (c *controllerProvider) ProvideSuperAdminInjectController() controllers.SuperAdminInjectController {
|
| 172 |
return c.superAdminInjectController
|
| 173 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
ProvideUploadController() controllers.UploadController
|
| 23 |
ProvideUserController() controllers.UserController
|
| 24 |
ProvideSuperAdminInjectController() controllers.SuperAdminInjectController
|
| 25 |
+
ProvideRepairController() controllers.RepairController
|
| 26 |
}
|
| 27 |
|
| 28 |
type controllerProvider struct {
|
|
|
|
| 45 |
uploadController controllers.UploadController
|
| 46 |
userController controllers.UserController
|
| 47 |
superAdminInjectController controllers.SuperAdminInjectController
|
| 48 |
+
repairController controllers.RepairController
|
| 49 |
}
|
| 50 |
|
| 51 |
func NewControllerProvider(servicesProvider ServicesProvider) ControllerProvider {
|
|
|
|
| 73 |
uploadController := controllers.NewUploadController(servicesProvider.ProvideUploadService())
|
| 74 |
userController := controllers.NewUserController(servicesProvider.ProvideAccountService())
|
| 75 |
superAdminInjectController := controllers.NewSuperAdminInjectController(servicesProvider.ProvideProblemSetService())
|
| 76 |
+
repairController := controllers.NewRepairController(servicesProvider.ProvideRepairService())
|
| 77 |
return &controllerProvider{
|
| 78 |
adminAcademyController: adminAcademyController,
|
| 79 |
adminEventController: adminEventController,
|
|
|
|
| 94 |
uploadController: uploadController,
|
| 95 |
userController: userController,
|
| 96 |
superAdminInjectController: superAdminInjectController,
|
| 97 |
+
repairController: repairController,
|
| 98 |
}
|
| 99 |
}
|
| 100 |
|
|
|
|
| 175 |
func (c *controllerProvider) ProvideSuperAdminInjectController() controllers.SuperAdminInjectController {
|
| 176 |
return c.superAdminInjectController
|
| 177 |
}
|
| 178 |
+
|
| 179 |
+
func (c *controllerProvider) ProvideRepairController() controllers.RepairController {
|
| 180 |
+
return c.repairController
|
| 181 |
+
}
|
provider/repositories_provider.go
CHANGED
|
@@ -33,6 +33,7 @@ type RepositoriesProvider interface {
|
|
| 33 |
ProvideProblemSetInjectRepository() repositories.ProblemSetInjectRepository
|
| 34 |
ProvideProblemSetRepository() repositories.ProblemSetRepository
|
| 35 |
ProvideQuestionsRepository() repositories.QuestionsRepository
|
|
|
|
| 36 |
ProvideRegionRepository() repositories.RegionRepository
|
| 37 |
ProvideResultRepository() repositories.ResultRepository
|
| 38 |
}
|
|
@@ -68,6 +69,7 @@ type repositoriesProvider struct {
|
|
| 68 |
problemSetInjectRepository repositories.ProblemSetInjectRepository
|
| 69 |
problemSetRepository repositories.ProblemSetRepository
|
| 70 |
questionsRepository repositories.QuestionsRepository
|
|
|
|
| 71 |
regionRepository repositories.RegionRepository
|
| 72 |
resultRepository repositories.ResultRepository
|
| 73 |
}
|
|
@@ -106,6 +108,7 @@ func NewRepositoriesProvider(cfg ConfigProvider) RepositoriesProvider {
|
|
| 106 |
problemSetInjectRepository := repositories.NewProblemSetInjectRepository(db)
|
| 107 |
problemSetRepository := repositories.NewProblemSetRepository(db)
|
| 108 |
questionsRepository := repositories.NewQuestionsRepository(db)
|
|
|
|
| 109 |
regionRepository := repositories.NewRegionRepository(db)
|
| 110 |
resultRepository := repositories.NewResultRepository(db)
|
| 111 |
|
|
@@ -140,6 +143,7 @@ func NewRepositoriesProvider(cfg ConfigProvider) RepositoriesProvider {
|
|
| 140 |
problemSetInjectRepository: problemSetInjectRepository,
|
| 141 |
problemSetRepository: problemSetRepository,
|
| 142 |
questionsRepository: questionsRepository,
|
|
|
|
| 143 |
regionRepository: regionRepository,
|
| 144 |
resultRepository: resultRepository,
|
| 145 |
}
|
|
@@ -265,6 +269,10 @@ func (r *repositoriesProvider) ProvideQuestionsRepository() repositories.Questio
|
|
| 265 |
return r.questionsRepository
|
| 266 |
}
|
| 267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
func (r *repositoriesProvider) ProvideRegionRepository() repositories.RegionRepository {
|
| 269 |
return r.regionRepository
|
| 270 |
}
|
|
|
|
| 33 |
ProvideProblemSetInjectRepository() repositories.ProblemSetInjectRepository
|
| 34 |
ProvideProblemSetRepository() repositories.ProblemSetRepository
|
| 35 |
ProvideQuestionsRepository() repositories.QuestionsRepository
|
| 36 |
+
ProvideRepairRepository() repositories.RepairRepository
|
| 37 |
ProvideRegionRepository() repositories.RegionRepository
|
| 38 |
ProvideResultRepository() repositories.ResultRepository
|
| 39 |
}
|
|
|
|
| 69 |
problemSetInjectRepository repositories.ProblemSetInjectRepository
|
| 70 |
problemSetRepository repositories.ProblemSetRepository
|
| 71 |
questionsRepository repositories.QuestionsRepository
|
| 72 |
+
repairRepository repositories.RepairRepository
|
| 73 |
regionRepository repositories.RegionRepository
|
| 74 |
resultRepository repositories.ResultRepository
|
| 75 |
}
|
|
|
|
| 108 |
problemSetInjectRepository := repositories.NewProblemSetInjectRepository(db)
|
| 109 |
problemSetRepository := repositories.NewProblemSetRepository(db)
|
| 110 |
questionsRepository := repositories.NewQuestionsRepository(db)
|
| 111 |
+
repairRepository := repositories.NewRepairRepository(db)
|
| 112 |
regionRepository := repositories.NewRegionRepository(db)
|
| 113 |
resultRepository := repositories.NewResultRepository(db)
|
| 114 |
|
|
|
|
| 143 |
problemSetInjectRepository: problemSetInjectRepository,
|
| 144 |
problemSetRepository: problemSetRepository,
|
| 145 |
questionsRepository: questionsRepository,
|
| 146 |
+
repairRepository: repairRepository,
|
| 147 |
regionRepository: regionRepository,
|
| 148 |
resultRepository: resultRepository,
|
| 149 |
}
|
|
|
|
| 269 |
return r.questionsRepository
|
| 270 |
}
|
| 271 |
|
| 272 |
+
func (r *repositoriesProvider) ProvideRepairRepository() repositories.RepairRepository {
|
| 273 |
+
return r.repairRepository
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
func (r *repositoriesProvider) ProvideRegionRepository() repositories.RegionRepository {
|
| 277 |
return r.regionRepository
|
| 278 |
}
|
provider/services_provider.go
CHANGED
|
@@ -18,6 +18,7 @@ type ServicesProvider interface {
|
|
| 18 |
ProvidePaymentService() services.PaymentService
|
| 19 |
ProvideUploadService() services.UploadService
|
| 20 |
ProvideProblemSetService() services.ProblemSetService
|
|
|
|
| 21 |
ProvideOptionService() services.OptionService
|
| 22 |
ProvideAccountService() services.AccountService
|
| 23 |
ProvideForgotPasswordService() services.ForgotPasswordService
|
|
@@ -40,6 +41,7 @@ type servicesProvider struct {
|
|
| 40 |
paymentService services.PaymentService
|
| 41 |
uploadService services.UploadService
|
| 42 |
problemSetService services.ProblemSetService
|
|
|
|
| 43 |
optionService services.OptionService
|
| 44 |
accountService services.AccountService
|
| 45 |
forgotPasswordService services.ForgotPasswordService
|
|
@@ -68,6 +70,7 @@ func NewServicesProvider(repoProvider RepositoriesProvider, configProvider Confi
|
|
| 68 |
repoProvider.ProvideProblemSetExamAssignRepository(),
|
| 69 |
repoProvider.ProvideProblemSetInjectRepository(),
|
| 70 |
)
|
|
|
|
| 71 |
optionService := services.NewOptionService(repoProvider.ProvideOptionRepository())
|
| 72 |
accountService := services.NewAccountService(jWTService, repoProvider.ProvideAccountRepository(), repoProvider.ProvideAccountDetailRepository(), configProvider.ProvideSuperAdminConfig())
|
| 73 |
forgotPasswordService := services.NewForgotPasswordService(jWTService, repoProvider.ProvideAccountRepository(), repoProvider.ProvideForgotPasswordRepository())
|
|
@@ -108,6 +111,7 @@ func NewServicesProvider(repoProvider RepositoriesProvider, configProvider Confi
|
|
| 108 |
paymentService: paymentService,
|
| 109 |
uploadService: uploadService,
|
| 110 |
problemSetService: problemSetService,
|
|
|
|
| 111 |
optionService: optionService,
|
| 112 |
accountService: accountService,
|
| 113 |
forgotPasswordService: forgotPasswordService,
|
|
@@ -160,6 +164,10 @@ func (s *servicesProvider) ProvideProblemSetService() services.ProblemSetService
|
|
| 160 |
return s.problemSetService
|
| 161 |
}
|
| 162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
func (s *servicesProvider) ProvideOptionService() services.OptionService {
|
| 164 |
return s.optionService
|
| 165 |
}
|
|
|
|
| 18 |
ProvidePaymentService() services.PaymentService
|
| 19 |
ProvideUploadService() services.UploadService
|
| 20 |
ProvideProblemSetService() services.ProblemSetService
|
| 21 |
+
ProvideRepairService() services.RepairService
|
| 22 |
ProvideOptionService() services.OptionService
|
| 23 |
ProvideAccountService() services.AccountService
|
| 24 |
ProvideForgotPasswordService() services.ForgotPasswordService
|
|
|
|
| 41 |
paymentService services.PaymentService
|
| 42 |
uploadService services.UploadService
|
| 43 |
problemSetService services.ProblemSetService
|
| 44 |
+
repairService services.RepairService
|
| 45 |
optionService services.OptionService
|
| 46 |
accountService services.AccountService
|
| 47 |
forgotPasswordService services.ForgotPasswordService
|
|
|
|
| 70 |
repoProvider.ProvideProblemSetExamAssignRepository(),
|
| 71 |
repoProvider.ProvideProblemSetInjectRepository(),
|
| 72 |
)
|
| 73 |
+
repairService := services.NewRepairService(repoProvider.ProvideRepairRepository())
|
| 74 |
optionService := services.NewOptionService(repoProvider.ProvideOptionRepository())
|
| 75 |
accountService := services.NewAccountService(jWTService, repoProvider.ProvideAccountRepository(), repoProvider.ProvideAccountDetailRepository(), configProvider.ProvideSuperAdminConfig())
|
| 76 |
forgotPasswordService := services.NewForgotPasswordService(jWTService, repoProvider.ProvideAccountRepository(), repoProvider.ProvideForgotPasswordRepository())
|
|
|
|
| 111 |
paymentService: paymentService,
|
| 112 |
uploadService: uploadService,
|
| 113 |
problemSetService: problemSetService,
|
| 114 |
+
repairService: repairService,
|
| 115 |
optionService: optionService,
|
| 116 |
accountService: accountService,
|
| 117 |
forgotPasswordService: forgotPasswordService,
|
|
|
|
| 164 |
return s.problemSetService
|
| 165 |
}
|
| 166 |
|
| 167 |
+
func (s *servicesProvider) ProvideRepairService() services.RepairService {
|
| 168 |
+
return s.repairService
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
func (s *servicesProvider) ProvideOptionService() services.OptionService {
|
| 172 |
return s.optionService
|
| 173 |
}
|
repositories/repair_repository.go
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package repositories
|
| 2 |
+
|
| 3 |
+
import (
|
| 4 |
+
"context"
|
| 5 |
+
|
| 6 |
+
"gorm.io/gorm"
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
type RepairRepository interface {
|
| 10 |
+
RepairQuestionStoragePath(ctx context.Context) (int64, error)
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
type repairRepository struct {
|
| 14 |
+
db *gorm.DB
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
func NewRepairRepository(db *gorm.DB) RepairRepository {
|
| 18 |
+
return &repairRepository{db: db}
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
func (r *repairRepository) RepairQuestionStoragePath(ctx context.Context) (int64, error) {
|
| 22 |
+
sql := `
|
| 23 |
+
UPDATE questions
|
| 24 |
+
SET question = REPLACE(
|
| 25 |
+
question,
|
| 26 |
+
'@@PLUGINFILE@@',
|
| 27 |
+
CONCAT('https://storage.quzuu.id', '/', problem_set_id)
|
| 28 |
+
)
|
| 29 |
+
WHERE question LIKE '%@@PLUGINFILE@@%';
|
| 30 |
+
`
|
| 31 |
+
|
| 32 |
+
records := r.db.WithContext(ctx).Exec(sql)
|
| 33 |
+
return records.RowsAffected, records.Error
|
| 34 |
+
}
|
router/super_admin_router.go
CHANGED
|
@@ -11,6 +11,7 @@ func SuperAdminRouter(router *gin.Engine, middleware provider.MiddlewareProvider
|
|
| 11 |
|
| 12 |
userController := controller.ProvideUserController()
|
| 13 |
injectController := controller.ProvideSuperAdminInjectController()
|
|
|
|
| 14 |
|
| 15 |
// Super Admin Users Routes
|
| 16 |
userSuperAdminGroup := router.Group("/api/v1/super-admin/users", authenticationMiddleware.VerifyAccount, authorizationMiddleware.VerifySuperAdmin)
|
|
@@ -26,4 +27,9 @@ func SuperAdminRouter(router *gin.Engine, middleware provider.MiddlewareProvider
|
|
| 26 |
{
|
| 27 |
injectSuperAdminGroup.POST("/probset", injectController.InjectProblemSet)
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
}
|
|
|
|
| 11 |
|
| 12 |
userController := controller.ProvideUserController()
|
| 13 |
injectController := controller.ProvideSuperAdminInjectController()
|
| 14 |
+
repairController := controller.ProvideRepairController()
|
| 15 |
|
| 16 |
// Super Admin Users Routes
|
| 17 |
userSuperAdminGroup := router.Group("/api/v1/super-admin/users", authenticationMiddleware.VerifyAccount, authorizationMiddleware.VerifySuperAdmin)
|
|
|
|
| 27 |
{
|
| 28 |
injectSuperAdminGroup.POST("/probset", injectController.InjectProblemSet)
|
| 29 |
}
|
| 30 |
+
|
| 31 |
+
repairSuperAdminGroup := router.Group("/api/v1/super-admin/repair", authenticationMiddleware.VerifyAccount, authorizationMiddleware.VerifySuperAdmin)
|
| 32 |
+
{
|
| 33 |
+
repairSuperAdminGroup.POST("/question/storage_path", repairController.RepairQuestionStoragePath)
|
| 34 |
+
}
|
| 35 |
}
|
services/repair_service.go
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package services
|
| 2 |
+
|
| 3 |
+
import (
|
| 4 |
+
"context"
|
| 5 |
+
|
| 6 |
+
"abdanhafidz.com/go-boilerplate/repositories"
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
type RepairService interface {
|
| 10 |
+
RepairQuestionStoragePath(ctx context.Context) (int64, error)
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
type repairService struct {
|
| 14 |
+
repairRepository repositories.RepairRepository
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
func NewRepairService(repairRepository repositories.RepairRepository) RepairService {
|
| 18 |
+
return &repairService{repairRepository: repairRepository}
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
func (s *repairService) RepairQuestionStoragePath(ctx context.Context) (int64, error) {
|
| 22 |
+
return s.repairRepository.RepairQuestionStoragePath(ctx)
|
| 23 |
+
}
|