Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
BACKEND CHALLENGES
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Phạm Quang Bảo
BACKEND CHALLENGES
Commits
c4bef394
Commit
c4bef394
authored
May 25, 2026
by
Phạm Quang Bảo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
f
parent
d2bdedd0
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
43 additions
and
43 deletions
+43
-43
index.ts
backend/src/controllers/api/v1.0/auth/send-otp/index.ts
+2
-2
index.ts
backend/src/controllers/api/v1.0/auth/verify-otp/index.ts
+1
-1
{id}.ts
backend/src/controllers/api/v1.0/classes/{id}.ts
+1
-1
bulk-enroll.ts
backend/src/controllers/api/v1.0/classes/{id}/bulk-enroll.ts
+5
-5
index.ts
backend/src/controllers/api/v1.0/courses/export/index.ts
+2
-2
index.ts
backend/src/controllers/api/v1.0/courses/import/index.ts
+3
-3
index.ts
backend/src/controllers/api/v1.0/courses/index.ts
+1
-1
{id}.ts
backend/src/controllers/api/v1.0/courses/{id}.ts
+1
-1
index.ts
...ollers/api/v1.0/enrollments/all-student-in-class/index.ts
+1
-1
index.ts
backend/src/controllers/api/v1.0/enrollments/enroll/index.ts
+1
-1
index.ts
...nd/src/controllers/api/v1.0/enrollments/unenroll/index.ts
+1
-1
index.ts
backend/src/controllers/api/v1.0/roles/index.ts
+1
-1
index.ts
backend/src/controllers/api/v1.0/roles/set-role/index.ts
+1
-1
index.ts
backend/src/index.ts
+2
-2
authorization.ts
backend/src/middlewares/authorization.ts
+1
-1
response.ts
backend/src/middlewares/response.ts
+1
-1
sequelize-config.ts
backend/src/models/sequelize-config.ts
+1
-1
ClassesProvider.ts
backend/src/providers/ClassesProvider.ts
+1
-1
CoursesProvider.ts
backend/src/providers/CoursesProvider.ts
+1
-1
EnrollProvider.ts
backend/src/providers/EnrollProvider.ts
+1
-1
RolesProvider.ts
backend/src/providers/RolesProvider.ts
+1
-1
schedulerService.ts
backend/src/services/schedulerService.ts
+2
-2
config.ts
backend/src/templates/swagger/config.ts
+10
-10
tsconfig.tsbuildinfo
backend/tsconfig.tsbuildinfo
+1
-1
No files found.
backend/src/controllers/api/v1.0/auth/send-otp/index.ts
View file @
c4bef394
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
AuthService
}
from
"#services/authService
.js
"
;
import
{
AuthService
}
from
"#services/authService"
;
import
{
MailService
}
from
"#services/mailService
.js
"
;
import
{
MailService
}
from
"#services/mailService"
;
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
...
...
backend/src/controllers/api/v1.0/auth/verify-otp/index.ts
View file @
c4bef394
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
AuthService
}
from
"#services/authService
.js
"
;
import
{
AuthService
}
from
"#services/authService"
;
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
...
...
backend/src/controllers/api/v1.0/classes/{id}.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
ClassesProvider
}
from
"#providers/ClassesProvider
.js
"
;
import
{
ClassesProvider
}
from
"#providers/ClassesProvider"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
...
...
backend/src/controllers/api/v1.0/classes/{id}/bulk-enroll.ts
View file @
c4bef394
import
{
Req
,
Res
}
from
"#interfaces/IApi
.js
"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
authMiddleware
}
from
"#middlewares/authentication
.js
"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authorize
}
from
"#middlewares/authorization
.js
"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
queryModifier
from
"#middlewares/request
.js
"
;
import
queryModifier
from
"#middlewares/request"
;
import
{
ClassesProvider
}
from
"#providers/ClassesProvider
.js
"
;
import
{
ClassesProvider
}
from
"#providers/ClassesProvider"
;
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
...
...
backend/src/controllers/api/v1.0/courses/export/index.ts
View file @
c4bef394
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
*
as
fastcsv
from
'@fast-csv/format'
;
import
*
as
fastcsv
from
'@fast-csv/format'
;
import
{
Req
,
Res
}
from
"#interfaces/IApi
.js
"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider
.js
"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
...
...
backend/src/controllers/api/v1.0/courses/import/index.ts
View file @
c4bef394
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Readable
}
from
'stream'
;
import
{
Readable
}
from
'stream'
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
uploadCSV
from
"#config/multer.config
.js
"
;
import
uploadCSV
from
"#config/multer.config"
;
import
csv
from
'csv-parser'
;
import
csv
from
'csv-parser'
;
import
{
Req
,
Res
}
from
"#interfaces/IApi
.js
"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider
.js
"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider"
;
export
default
(
_express
:
Application
)
=>
{
export
default
(
_express
:
Application
)
=>
{
const
coursesProvider
=
new
CoursesProvider
();
const
coursesProvider
=
new
CoursesProvider
();
...
...
backend/src/controllers/api/v1.0/courses/index.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider
.js
"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
...
...
backend/src/controllers/api/v1.0/courses/{id}.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider
.js
"
;
import
{
CoursesProvider
}
from
"#providers/CoursesProvider"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
...
...
backend/src/controllers/api/v1.0/enrollments/all-student-in-class/index.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider
.js
"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
...
...
backend/src/controllers/api/v1.0/enrollments/enroll/index.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider
.js
"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
authMiddleware
}
from
"#middlewares/authentication"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
...
...
backend/src/controllers/api/v1.0/enrollments/unenroll/index.ts
View file @
c4bef394
import
type
{
Application
}
from
"express"
;
import
type
{
Application
}
from
"express"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
type
{
Resource
}
from
"express-automatic-routes"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider
.js
"
;
import
{
EnrollProvider
}
from
"#providers/EnrollProvider"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
...
...
backend/src/controllers/api/v1.0/roles/index.ts
View file @
c4bef394
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
RolesProvider
}
from
"#providers/RolesProvider
.js
"
;
import
{
RolesProvider
}
from
"#providers/RolesProvider"
;
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
queryModifier
from
"#middlewares/request"
;
import
queryModifier
from
"#middlewares/request"
;
...
...
backend/src/controllers/api/v1.0/roles/set-role/index.ts
View file @
c4bef394
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
Req
,
Res
}
from
"#interfaces/IApi"
;
import
{
RolesProvider
}
from
"#providers/RolesProvider
.js
"
;
import
{
RolesProvider
}
from
"#providers/RolesProvider"
;
import
{
Application
}
from
"express"
;
import
{
Application
}
from
"express"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
Resource
}
from
"express-automatic-routes"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
import
{
authorize
}
from
"#middlewares/authorization"
;
...
...
backend/src/index.ts
View file @
c4bef394
...
@@ -3,8 +3,8 @@ import { resolve } from 'path';
...
@@ -3,8 +3,8 @@ import { resolve } from 'path';
import
_autoroutes
from
'express-automatic-routes'
;
import
_autoroutes
from
'express-automatic-routes'
;
import
swaggerUi
from
'swagger-ui-express'
;
import
swaggerUi
from
'swagger-ui-express'
;
import
dotenv
from
'dotenv'
;
import
dotenv
from
'dotenv'
;
import
response
from
'#middlewares/response
.js
'
;
import
response
from
'#middlewares/response'
;
import
emailCronJob
from
'#services/schedulerService
.js
'
;
import
emailCronJob
from
'#services/schedulerService'
;
import
{
createRequire
}
from
'module'
;
import
{
createRequire
}
from
'module'
;
dotenv
.
config
();
dotenv
.
config
();
...
...
backend/src/middlewares/authorization.ts
View file @
c4bef394
import
{
NextFunction
}
from
'express'
;
import
{
NextFunction
}
from
'express'
;
import
{
models
}
from
'#models/sequelize-config
.js
'
;
import
{
models
}
from
'#models/sequelize-config'
;
import
{
Req
,
Res
}
from
'#interfaces/IApi'
;
import
{
Req
,
Res
}
from
'#interfaces/IApi'
;
export
const
authorize
=
(...
allowedRoles
:
string
[])
=>
{
export
const
authorize
=
(...
allowedRoles
:
string
[])
=>
{
...
...
backend/src/middlewares/response.ts
View file @
c4bef394
import
{
ErrorParams
,
OkParams
,
Req
,
Res
,
ResponseDTO
,
ViolationDTO
}
from
"#interfaces/IApi
.js
"
;
import
{
ErrorParams
,
OkParams
,
Req
,
Res
,
ResponseDTO
,
ViolationDTO
}
from
"#interfaces/IApi"
;
import
{
NextFunction
}
from
"express"
;
import
{
NextFunction
}
from
"express"
;
export
default
function
(
_req
:
Req
,
res
:
Res
,
next
:
NextFunction
)
{
export
default
function
(
_req
:
Req
,
res
:
Res
,
next
:
NextFunction
)
{
...
...
backend/src/models/sequelize-config.ts
View file @
c4bef394
import
{
Sequelize
}
from
'sequelize'
;
import
{
Sequelize
}
from
'sequelize'
;
import
{
config
as
loadEnv
}
from
'dotenv'
;
import
{
config
as
loadEnv
}
from
'dotenv'
;
import
{
initModels
}
from
'./init-models
.js
'
;
import
{
initModels
}
from
'./init-models'
;
loadEnv
({
override
:
true
});
loadEnv
({
override
:
true
});
...
...
backend/src/providers/ClassesProvider.ts
View file @
c4bef394
import
{
payload
}
from
'#interfaces/IApi'
;
import
{
payload
}
from
'#interfaces/IApi'
;
import
{
models
,
sequelize
}
from
'#models/sequelize-config
.js
'
;
import
{
models
,
sequelize
}
from
'#models/sequelize-config'
;
interface
CreateClassInput
{
interface
CreateClassInput
{
name
:
string
;
name
:
string
;
...
...
backend/src/providers/CoursesProvider.ts
View file @
c4bef394
import
{
payload
}
from
'#interfaces/IApi'
;
import
{
payload
}
from
'#interfaces/IApi'
;
import
{
models
}
from
'#models/sequelize-config
.js
'
;
import
{
models
}
from
'#models/sequelize-config'
;
interface
CreateCourseInput
{
interface
CreateCourseInput
{
name
:
string
;
name
:
string
;
...
...
backend/src/providers/EnrollProvider.ts
View file @
c4bef394
import
{
models
}
from
"#models/sequelize-config
.js
"
;
import
{
models
}
from
"#models/sequelize-config"
;
export
class
EnrollProvider
{
export
class
EnrollProvider
{
async
enroll
(
userId
:
string
,
classId
:
string
)
{
async
enroll
(
userId
:
string
,
classId
:
string
)
{
...
...
backend/src/providers/RolesProvider.ts
View file @
c4bef394
import
{
payload
}
from
"#interfaces/IApi"
;
import
{
payload
}
from
"#interfaces/IApi"
;
import
{
models
}
from
"#models/sequelize-config
.js
"
;
import
{
models
}
from
"#models/sequelize-config"
;
export
class
RolesProvider
{
export
class
RolesProvider
{
async
getRoles
(
params
:
payload
)
{
async
getRoles
(
params
:
payload
)
{
...
...
backend/src/services/schedulerService.ts
View file @
c4bef394
import
cron
from
'node-cron'
;
import
cron
from
'node-cron'
;
import
{
MailService
}
from
'./mailService
.js
'
;
import
{
MailService
}
from
'./mailService'
;
import
{
EnrollProvider
}
from
'#providers/EnrollProvider
.js
'
;
import
{
EnrollProvider
}
from
'#providers/EnrollProvider'
;
const
mailService
=
new
MailService
();
const
mailService
=
new
MailService
();
const
enrollProvider
=
new
EnrollProvider
();
const
enrollProvider
=
new
EnrollProvider
();
...
...
backend/src/templates/swagger/config.ts
View file @
c4bef394
import
path
from
'node:path'
;
import
path
from
'node:path'
;
import
classSchemas
from
'./classes/schemas
.js
'
;
import
classSchemas
from
'./classes/schemas'
;
import
courseSchemas
from
'./courses/schemas
.js
'
;
import
courseSchemas
from
'./courses/schemas'
;
import
type
{
Options
}
from
'swagger-jsdoc'
;
import
type
{
Options
}
from
'swagger-jsdoc'
;
import
registerSchemas
from
'./register/schemas
.js
'
;
import
registerSchemas
from
'./register/schemas'
;
import
loginSchemas
from
'./login/schemas
.js
'
;
import
loginSchemas
from
'./login/schemas'
;
import
authProfileSchemas
from
'./authProfile/schema
.js
'
;
import
authProfileSchemas
from
'./authProfile/schema'
;
import
sendOTPSchemas
from
'./sendOTP/schema
.js
'
;
import
sendOTPSchemas
from
'./sendOTP/schema'
;
import
verifyOTPSchemas
from
'./verifyOTP/schema
.js
'
;
import
verifyOTPSchemas
from
'./verifyOTP/schema'
;
import
logoutSchemas
from
'./logout/schema
.js
'
;
import
logoutSchemas
from
'./logout/schema'
;
import
enrollmentSchemas
from
'./enrollment/schema
.js
'
;
import
enrollmentSchemas
from
'./enrollment/schema'
;
import
rolesSchemas
from
'./roles/schema
.js
'
;
import
rolesSchemas
from
'./roles/schema'
;
const
swaggerOptions
:
Options
=
{
const
swaggerOptions
:
Options
=
{
definition
:
{
definition
:
{
...
...
backend/tsconfig.tsbuildinfo
View file @
c4bef394
This source diff could not be displayed because it is too large. You can
view the blob
instead.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment