updateContacts method got MeController

This commit is contained in:
Sergey Yarkov 2021-07-25 21:28:50 +03:00
parent 6d32ca0857
commit df1d1716d5
5 changed files with 42 additions and 16 deletions

View File

@ -4,6 +4,7 @@ import Hash from '@ioc:Adonis/Core/Hash';
import Logger from '@ioc:Adonis/Core/Logger';
import ChangePasswordValidator from 'App/Validators/ChangePasswordValidator';
import Contact from 'App/Models/Contact';
import UpdateContactsValidator from 'App/Validators/UpdateContactsValidator';
export default class MeController {
private readonly guard: 'api';
@ -69,5 +70,25 @@ export default class MeController {
* Update contacts of authenticated user
* PATCH /me/contacts
*/
// public async updateContacts({ request, response, auth }: HttpContextContract) {}
public async updateContacts({ request, response, auth }: HttpContextContract) {
const payload = await request.validate(UpdateContactsValidator);
const user = await auth.use(this.guard).authenticate();
const contacts = await this.contact.findByOrFail('user_id', user.id);
/**
* Update contacts
*/
if (payload.email) contacts.email = payload.email;
contacts.phone_number = payload.phone_number ?? null;
contacts.vk_id = payload.vk_id ?? null;
contacts.twitter_id = payload.twitter_id ?? null;
contacts.telegram_id = payload.telegram_id ?? null;
await contacts.save();
return response.ok({
message: `Contacts has been successfully updated.`,
data: contacts,
});
}
}

View File

@ -78,7 +78,7 @@ export default class UsersController {
await request.validate(UpdateUserValidator);
const user = await this.user.findOrFail(params.id);
const dataInput: Pick<User, 'first_name' | 'last_name' | 'login' | 'password'> = {
const input: Pick<User, 'first_name' | 'last_name' | 'login' | 'password'> = {
first_name: request.input('first_name'),
last_name: request.input('last_name'),
login: request.input('login'),
@ -86,11 +86,11 @@ export default class UsersController {
};
/**
* Update only provided input roles value.
* Update roles
*/
Object.keys(dataInput).forEach(k => {
if (dataInput[k] !== undefined) {
user[k] = dataInput[k];
Object.keys(input).forEach(k => {
if (input[k] !== undefined) {
user[k] = input[k];
}
});

View File

@ -12,16 +12,16 @@ export default class Contact extends BaseModel {
public email: string;
@column()
public phone_number: string;
public phone_number: string | null;
@column()
public vk_id: string;
public vk_id: string | null;
@column()
public twitter_id: string;
public twitter_id: string | null;
@column()
public telegram_id: string;
public telegram_id: string | null;
@column.dateTime({ autoCreate: true, serializeAs: null })
public createdAt: DateTime;

View File

@ -5,11 +5,16 @@ export default class UpdateContactsValidator {
constructor(protected ctx: HttpContextContract) {}
public schema = schema.create({
email: schema.string.optional({}, [rules.email(), rules.unique({ table: 'contacts', column: 'email' })]),
phone_number: schema.string.optional(),
vk_id: schema.string.optional(),
twitter_id: schema.string.optional(),
telegram_id: schema.string.optional(),
email: schema.string.optional({}, [rules.email()]),
phone_number: schema.string.optional({}, [
rules.mobile({
locales: ['ru-RU', 'en-US'],
strict: true,
}),
]),
vk_id: schema.string.optional({}, [rules.regex(/^[a-zA-Z0-9_]+$/)]),
twitter_id: schema.string.optional({}, [rules.regex(/^[a-zA-Z0-9_]+$/)]),
telegram_id: schema.string.optional({}, [rules.regex(/^[a-zA-Z0-9_]+$/)]),
});
public messages = {};

View File

@ -47,7 +47,7 @@ Route.group(() => {
Route.patch('me/password', 'MeController.changePassword')
.middleware('role:admin,teacher,student')
.as('changePassword');
Route.patch('me/contacts', 'MeController.updateContacts')
Route.put('me/contacts', 'MeController.updateContacts')
.middleware('role:admin,teacher,student')
.as('updateContacts');
}).middleware('auth');