mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 18:29:15 +03:00
feat: category updating
This commit is contained in:
parent
175150a60a
commit
bac861a09d
@ -7,9 +7,10 @@ import { Exception, inject, Ioc } from '@adonisjs/core/build/standalone';
|
|||||||
import CategoryService from 'App/Services/CategoryService';
|
import CategoryService from 'App/Services/CategoryService';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validatoes
|
* Validators
|
||||||
*/
|
*/
|
||||||
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
||||||
|
import UpdateCategoryValidator from 'App/Validators/Category/UpdateCategoryValidator';
|
||||||
|
|
||||||
import BaseController from '../../BaseController';
|
import BaseController from '../../BaseController';
|
||||||
|
|
||||||
@ -78,6 +79,21 @@ export default class CategoriesController extends BaseController {
|
|||||||
|
|
||||||
return this.sendResponse(ctx, result.data, result.message, result.status);
|
return this.sendResponse(ctx, result.data, result.message, result.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update category by id
|
||||||
|
* PATCH /categories/:id
|
||||||
|
*/
|
||||||
|
public async update(ctx: HttpContextContract) {
|
||||||
|
const payload = await ctx.request.validate(UpdateCategoryValidator);
|
||||||
|
const result = await this.categoryService.updateCategory(ctx.params.id, payload);
|
||||||
|
|
||||||
|
if (!result.success && result.error) {
|
||||||
|
throw new Exception(result.message, result.status, result.error.code);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.sendResponse(ctx, result.data, result.message, result.status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new Ioc().make(CategoriesController);
|
new Ioc().make(CategoriesController);
|
||||||
|
|||||||
@ -24,10 +24,10 @@ export default class Category extends BaseModel {
|
|||||||
})
|
})
|
||||||
public color: BelongsTo<typeof Color>;
|
public color: BelongsTo<typeof Color>;
|
||||||
|
|
||||||
@column.dateTime({ autoCreate: true, serializeAs: null })
|
@column.dateTime({ autoCreate: true })
|
||||||
public createdAt: DateTime;
|
public createdAt: DateTime;
|
||||||
|
|
||||||
@column.dateTime({ autoCreate: true, autoUpdate: true, serializeAs: null })
|
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||||
public updatedAt: DateTime;
|
public updatedAt: DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import Category from 'App/Models/Category';
|
|||||||
* Validators
|
* Validators
|
||||||
*/
|
*/
|
||||||
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
||||||
|
import UpdateCategoryValidator from 'App/Validators/Category/UpdateCategoryValidator';
|
||||||
|
|
||||||
export default class CategoryRepository {
|
export default class CategoryRepository {
|
||||||
private Category: typeof Category;
|
private Category: typeof Category;
|
||||||
@ -67,4 +68,27 @@ export default class CategoryRepository {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id Category id
|
||||||
|
* @param data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
public async update(id: string | number, data: UpdateCategoryValidator['schema']['props']): Promise<Category | null> {
|
||||||
|
const category = await this.Category.query().where('id', id).first();
|
||||||
|
|
||||||
|
if (category) {
|
||||||
|
await category
|
||||||
|
.merge({
|
||||||
|
title: data.title,
|
||||||
|
description: data.description,
|
||||||
|
})
|
||||||
|
.save();
|
||||||
|
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import CategoryRepository from 'App/Repositories/CategoryRepository';
|
|||||||
* Validators
|
* Validators
|
||||||
*/
|
*/
|
||||||
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
import CreateCategoryValidator from 'App/Validators/Category/CreateCategoryValidator';
|
||||||
|
import UpdateCategoryValidator from 'App/Validators/Category/UpdateCategoryValidator';
|
||||||
|
|
||||||
@inject()
|
@inject()
|
||||||
export default class CategoryService {
|
export default class CategoryService {
|
||||||
@ -114,6 +115,38 @@ export default class CategoryService {
|
|||||||
data,
|
data,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update category
|
||||||
|
*
|
||||||
|
* @param id Category id
|
||||||
|
* @returns Updated category
|
||||||
|
*/
|
||||||
|
public async updateCategory(
|
||||||
|
id: string | number,
|
||||||
|
data: UpdateCategoryValidator['schema']['props']
|
||||||
|
): Promise<IResponse> {
|
||||||
|
const category = await this.categoryRepository.update(id, data);
|
||||||
|
|
||||||
|
if (!category) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
status: HttpStatusEnum.NOT_FOUND,
|
||||||
|
message: 'Category not found.',
|
||||||
|
data: {},
|
||||||
|
error: {
|
||||||
|
code: 'E_NOT_FOUND',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
success: true,
|
||||||
|
status: HttpStatusEnum.OK,
|
||||||
|
message: 'Category updated.',
|
||||||
|
data,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new Ioc().make(CategoryService);
|
new Ioc().make(CategoryService);
|
||||||
|
|||||||
@ -6,7 +6,7 @@ export default class CreateCategoryValidator {
|
|||||||
|
|
||||||
public schema = schema.create({
|
public schema = schema.create({
|
||||||
title: schema.string(),
|
title: schema.string(),
|
||||||
description: schema.string(),
|
description: schema.string.optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
public messages = {};
|
public messages = {};
|
||||||
|
|||||||
13
app/Validators/Category/UpdateCategoryValidator.ts
Normal file
13
app/Validators/Category/UpdateCategoryValidator.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { schema } from '@ioc:Adonis/Core/Validator';
|
||||||
|
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
|
||||||
|
|
||||||
|
export default class UpdateCategoryValidator {
|
||||||
|
constructor(protected ctx: HttpContextContract) {}
|
||||||
|
|
||||||
|
public schema = schema.create({
|
||||||
|
title: schema.string.optional(),
|
||||||
|
description: schema.string.optional(),
|
||||||
|
});
|
||||||
|
|
||||||
|
public messages = {};
|
||||||
|
}
|
||||||
@ -5,4 +5,5 @@ Route.group(() => {
|
|||||||
Route.get('/:id', 'Api/v1/CategoriesController.show').middleware('role:admin,teacher,student').as('categories.show');
|
Route.get('/:id', 'Api/v1/CategoriesController.show').middleware('role:admin,teacher,student').as('categories.show');
|
||||||
Route.post('/', 'Api/v1/CategoriesController.create').middleware('role:admin,teacher').as('categories.create');
|
Route.post('/', 'Api/v1/CategoriesController.create').middleware('role:admin,teacher').as('categories.create');
|
||||||
Route.delete('/:id', 'Api/v1/CategoriesController.delete').middleware('role:admin,teacher').as('categories.delete');
|
Route.delete('/:id', 'Api/v1/CategoriesController.delete').middleware('role:admin,teacher').as('categories.delete');
|
||||||
|
Route.patch('/:id', 'Api/v1/CategoriesController.update').middleware('role:admin,teacher').as('categories.update');
|
||||||
}).prefix('categories');
|
}).prefix('categories');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user