Hozifa Elgherbawy commited on
Commit
cf843e4
·
unverified ·
2 Parent(s): 2b9d1fb 77bed8d

Merge pull request #55 from Modarb-Ai-Trainer:template

Browse files
src/common/models/template.model.ts CHANGED
@@ -1,16 +1,19 @@
 
1
  import mongoose from "mongoose";
2
  const { Schema } = mongoose;
3
 
4
  export interface ITemplate {
5
- name: string;
6
- user: string;
7
- exercises: string[];
 
8
  }
9
 
10
  const templateSchema = new Schema({
11
- name: { type: String, required: true, unique: true, dropDups: true },
12
- user: { type: mongoose.Types.ObjectId, ref: "users" },
13
- exercises: [{ type: mongoose.Types.ObjectId, ref: "exercises" }],
 
14
  });
15
 
16
 
 
1
+ import { date } from "joi";
2
  import mongoose from "mongoose";
3
  const { Schema } = mongoose;
4
 
5
  export interface ITemplate {
6
+ name: string;
7
+ user: string;
8
+ creationDate: Date;
9
+ exercises: string[];
10
  }
11
 
12
  const templateSchema = new Schema({
13
+ name: { type: String, required: true, unique: true, dropDups: true },
14
+ user: { type: mongoose.Types.ObjectId, ref: "users" },
15
+ creationDate: { type: Date, default: Date.now() },
16
+ exercises: [{ type: mongoose.Types.ObjectId, ref: "exercises" }],
17
  });
18
 
19
 
src/common/serializers/template.serialization.ts CHANGED
@@ -14,6 +14,10 @@ export class TemplateSerialization {
14
  @SwaggerResponseProperty({ type: "string" })
15
  user: string;
16
 
 
 
 
 
17
  @Expose()
18
  @SwaggerResponseProperty({ type: ["string"] })
19
  exercises: string[];
 
14
  @SwaggerResponseProperty({ type: "string" })
15
  user: string;
16
 
17
+ @Expose()
18
+ @SwaggerResponseProperty({ type: "Date" })
19
+ creationDate: Date;
20
+
21
  @Expose()
22
  @SwaggerResponseProperty({ type: ["string"] })
23
  exercises: string[];
src/modules/users/modules/templates/controllers/templates.controller.ts CHANGED
@@ -45,7 +45,12 @@ export class templateController extends BaseController {
45
  const paginationQuery = parsePaginationQuery(req.query);
46
  const { docs, paginationData } = await this.templatesService.list(
47
  { user: req.jwtPayload.id },
48
- paginationQuery
 
 
 
 
 
49
  );
50
 
51
  return JsonResponse.success(
@@ -60,10 +65,16 @@ export class templateController extends BaseController {
60
  @SwaggerGet("/:id")
61
  @SwaggerResponse(TemplateSerialization)
62
  get = async (req: userRequest, res: Response): Promise<Response> => {
63
- const data = await this.templatesService.findOneOrFail({
64
- _id: req.params.id,
65
- user: req.jwtPayload.id
66
- });
 
 
 
 
 
 
67
 
68
  return JsonResponse.success(
69
  {
 
45
  const paginationQuery = parsePaginationQuery(req.query);
46
  const { docs, paginationData } = await this.templatesService.list(
47
  { user: req.jwtPayload.id },
48
+ paginationQuery,
49
+ {
50
+ populateArray: [
51
+ { path: "exercises", select: "name duration reps sets" },
52
+ ],
53
+ }
54
  );
55
 
56
  return JsonResponse.success(
 
65
  @SwaggerGet("/:id")
66
  @SwaggerResponse(TemplateSerialization)
67
  get = async (req: userRequest, res: Response): Promise<Response> => {
68
+ const data = await this.templatesService.findOneOrFail(
69
+ {
70
+ _id: req.params.id,
71
+ user: req.jwtPayload.id
72
+ },
73
+ {
74
+ populateArray: [
75
+ { path: "exercises", select: "name duration reps sets" },
76
+ ],
77
+ });
78
 
79
  return JsonResponse.success(
80
  {
src/modules/users/modules/templates/validations/create-templates.validation.ts CHANGED
@@ -5,6 +5,7 @@ import { createSchema } from "@helpers/create-schema";
5
  export interface ICreateTemplates {
6
  name: string;
7
  user: string;
 
8
  exercises: string[];
9
  }
10
 
@@ -19,6 +20,9 @@ export const createTemplatesSchema = createSchema<ICreateTemplates>({
19
  "any.required": "user id is required",
20
  "string.empty": "user id can not be empty",
21
  }),
 
 
 
22
  exercises: joi.array().empty().required().items(
23
  joi.string().empty().required().messages({
24
  "string.base": "please enter a valid exercise id",
 
5
  export interface ICreateTemplates {
6
  name: string;
7
  user: string;
8
+ creationDate?: Date;
9
  exercises: string[];
10
  }
11
 
 
20
  "any.required": "user id is required",
21
  "string.empty": "user id can not be empty",
22
  }),
23
+ creationDate: joi.date().optional().messages({
24
+ "date.base": "please enter a valid creation date",
25
+ }),
26
  exercises: joi.array().empty().required().items(
27
  joi.string().empty().required().messages({
28
  "string.base": "please enter a valid exercise id",
src/modules/users/modules/templates/validations/update-templates.validation.ts CHANGED
@@ -6,6 +6,7 @@ import { createSchema } from "@helpers/create-schema";
6
  export interface IUpdateTemplates {
7
  name?: string;
8
  user?: string;
 
9
  exercises?: string[];
10
  }
11
 
@@ -19,6 +20,9 @@ export const updateTemplatesSchema = createSchema<IUpdateTemplates>({
19
  "string.base": "please enter a valid user id",
20
  "string.empty": "user id can not be empty",
21
  }),
 
 
 
22
  exercises: joi.array().empty().optional().items(
23
  joi.string().empty().optional().messages({
24
  "string.base": "please enter a valid exercise id",
 
6
  export interface IUpdateTemplates {
7
  name?: string;
8
  user?: string;
9
+ creationDate?: Date;
10
  exercises?: string[];
11
  }
12
 
 
20
  "string.base": "please enter a valid user id",
21
  "string.empty": "user id can not be empty",
22
  }),
23
+ creationDate: joi.date().optional().messages({
24
+ "date.base": "please enter a valid creation date",
25
+ }),
26
  exercises: joi.array().empty().optional().items(
27
  joi.string().empty().optional().messages({
28
  "string.base": "please enter a valid exercise id",