mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 18:29:15 +03:00
feat: course status
This commit is contained in:
parent
ce22ac9f92
commit
2811b9974d
6
app/Datatypes/Enums/CourseStatusEnum.ts
Normal file
6
app/Datatypes/Enums/CourseStatusEnum.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
enum CourseStatusEnum {
|
||||||
|
PUBLISHED = 'PUBLISHED',
|
||||||
|
DRAFT = 'DRAFT',
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CourseStatusEnum;
|
||||||
@ -16,6 +16,7 @@ import {
|
|||||||
import Category from 'App/Models/Category';
|
import Category from 'App/Models/Category';
|
||||||
import Lesson from 'App/Models/Lesson';
|
import Lesson from 'App/Models/Lesson';
|
||||||
import User from 'App/Models/User';
|
import User from 'App/Models/User';
|
||||||
|
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
|
||||||
|
|
||||||
export default class Course extends BaseModel {
|
export default class Course extends BaseModel {
|
||||||
@column({ isPrimary: true })
|
@column({ isPrimary: true })
|
||||||
@ -33,6 +34,9 @@ export default class Course extends BaseModel {
|
|||||||
@column()
|
@column()
|
||||||
public category_id: string;
|
public category_id: string;
|
||||||
|
|
||||||
|
@column()
|
||||||
|
public status: CourseStatusEnum;
|
||||||
|
|
||||||
@belongsTo(() => Category, {
|
@belongsTo(() => Category, {
|
||||||
foreignKey: 'category_id',
|
foreignKey: 'category_id',
|
||||||
})
|
})
|
||||||
|
|||||||
@ -260,7 +260,7 @@ export default class CourseService {
|
|||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
status: StatusCodeEnum.BAD_REQUEST,
|
status: StatusCodeEnum.BAD_REQUEST,
|
||||||
message: `User with id "${teacher.id}" not teacher.`,
|
message: `User with id "${teacher.id}" not a teacher.`,
|
||||||
data: {},
|
data: {},
|
||||||
error: {
|
error: {
|
||||||
code: 'E_BAD_REQUEST',
|
code: 'E_BAD_REQUEST',
|
||||||
|
|||||||
@ -1,8 +1,18 @@
|
|||||||
import Factory from '@ioc:Adonis/Lucid/Factory';
|
import Factory from '@ioc:Adonis/Lucid/Factory';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Datatypes
|
||||||
|
*/
|
||||||
|
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Models
|
||||||
|
*/
|
||||||
import Category from 'App/Models/Category';
|
import Category from 'App/Models/Category';
|
||||||
import Contact from 'App/Models/Contact';
|
import Contact from 'App/Models/Contact';
|
||||||
import Course from 'App/Models/Course';
|
import Course from 'App/Models/Course';
|
||||||
import Lesson from 'App/Models/Lesson';
|
import Lesson from 'App/Models/Lesson';
|
||||||
|
import LessonContent from 'App/Models/LessonContent';
|
||||||
import User from 'App/Models/User';
|
import User from 'App/Models/User';
|
||||||
|
|
||||||
export const ContactFactory = Factory.define(Contact, ({ faker }) => {
|
export const ContactFactory = Factory.define(Contact, ({ faker }) => {
|
||||||
@ -23,13 +33,21 @@ export const UserFactory = Factory.define(User, ({ faker }) => {
|
|||||||
.relation('contacts', () => ContactFactory)
|
.relation('contacts', () => ContactFactory)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
export const LessonFactory = Factory.define(Lesson, ({ faker }) => {
|
export const LessonContentFactory = Factory.define(LessonContent, ({ faker }) => {
|
||||||
return {
|
return {
|
||||||
title: faker.lorem.sentence(2),
|
video_url: `https://www.youtube.com/embed/${faker.datatype.string(10)}`,
|
||||||
description: faker.lorem.sentence(5),
|
|
||||||
};
|
};
|
||||||
}).build();
|
}).build();
|
||||||
|
|
||||||
|
export const LessonFactory = Factory.define(Lesson, ({ faker }) => {
|
||||||
|
return {
|
||||||
|
title: `Lesson #${faker.datatype.number(200)}`,
|
||||||
|
description: faker.lorem.sentence(5),
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.relation('content', () => LessonContentFactory)
|
||||||
|
.build();
|
||||||
|
|
||||||
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
|
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
|
||||||
const title = faker.lorem.word(6);
|
const title = faker.lorem.word(6);
|
||||||
return {
|
return {
|
||||||
@ -40,8 +58,9 @@ export const CategoryFactory = Factory.define(Category, ({ faker }) => {
|
|||||||
|
|
||||||
export const CourseFactory = Factory.define(Course, ({ faker }) => {
|
export const CourseFactory = Factory.define(Course, ({ faker }) => {
|
||||||
return {
|
return {
|
||||||
title: faker.lorem.sentence(3),
|
title: `Course #${faker.datatype.number(200)}`,
|
||||||
description: faker.lorem.sentence(5),
|
description: faker.lorem.sentence(5),
|
||||||
|
status: CourseStatusEnum.PUBLISHED,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.relation('category', () => CategoryFactory)
|
.relation('category', () => CategoryFactory)
|
||||||
|
|||||||
@ -10,12 +10,21 @@ export default class Courses extends BaseSchema {
|
|||||||
table.string('description').notNullable();
|
table.string('description').notNullable();
|
||||||
table.string('teacher_id', 21).unsigned().references('users.id').onDelete('CASCADE');
|
table.string('teacher_id', 21).unsigned().references('users.id').onDelete('CASCADE');
|
||||||
table.string('category_id', 21).unsigned().references('categories.id').onDelete('CASCADE');
|
table.string('category_id', 21).unsigned().references('categories.id').onDelete('CASCADE');
|
||||||
|
table
|
||||||
|
.enu('status', ['DRAFT', 'PUBLISHED'], {
|
||||||
|
useNative: true,
|
||||||
|
enumName: 'course_status',
|
||||||
|
existingType: false,
|
||||||
|
schemaName: 'public',
|
||||||
|
})
|
||||||
|
.notNullable();
|
||||||
table.timestamp('created_at', { useTz: true });
|
table.timestamp('created_at', { useTz: true });
|
||||||
table.timestamp('updated_at', { useTz: true });
|
table.timestamp('updated_at', { useTz: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async down() {
|
public async down() {
|
||||||
|
await this.schema.raw('DROP TYPE IF EXISTS "course_status" CASCADE');
|
||||||
this.schema.dropTable(this.tableName);
|
this.schema.dropTable(this.tableName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ export default class CourseSeeder extends BaseSeeder {
|
|||||||
.firstOrFail();
|
.firstOrFail();
|
||||||
|
|
||||||
await CourseFactory.with('category')
|
await CourseFactory.with('category')
|
||||||
.with('lessons', 2)
|
.with('lessons', 2, lessonFactory => lessonFactory.with('content'))
|
||||||
.createMany(3, (course: Course) => course.related('teacher').associate(teacher));
|
.createMany(3, (course: Course) => course.related('teacher').associate(teacher));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
"db:migrate:force": "node ace migration:run --force",
|
"db:migrate:force": "node ace migration:run --force",
|
||||||
"db:rollback": "node ace migration:rollback",
|
"db:rollback": "node ace migration:rollback",
|
||||||
"db:status": "node ace migration:status",
|
"db:status": "node ace migration:status",
|
||||||
"db:refresh": "node ace migration:refresh && npm run db:seed",
|
|
||||||
"db:seed": "node ace db:seed",
|
"db:seed": "node ace db:seed",
|
||||||
"db:seed:force": "node ace seed --force"
|
"db:seed:force": "node ace seed --force"
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user