diff --git a/app/Controllers/Http/MeController.ts b/app/Controllers/Http/MeController.ts index a108857..87ed611 100644 --- a/app/Controllers/Http/MeController.ts +++ b/app/Controllers/Http/MeController.ts @@ -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, + }); + } } diff --git a/app/Controllers/Http/UsersController.ts b/app/Controllers/Http/UsersController.ts index c78894c..5f98dfe 100644 --- a/app/Controllers/Http/UsersController.ts +++ b/app/Controllers/Http/UsersController.ts @@ -78,7 +78,7 @@ export default class UsersController { await request.validate(UpdateUserValidator); const user = await this.user.findOrFail(params.id); - const dataInput: Pick = { + const input: Pick = { 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]; } }); diff --git a/app/Models/Contact.ts b/app/Models/Contact.ts index da2afe5..91fe82a 100644 --- a/app/Models/Contact.ts +++ b/app/Models/Contact.ts @@ -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; diff --git a/app/Validators/UpdateContactsValidator.ts b/app/Validators/UpdateContactsValidator.ts index 771db23..d565e38 100644 --- a/app/Validators/UpdateContactsValidator.ts +++ b/app/Validators/UpdateContactsValidator.ts @@ -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 = {}; diff --git a/start/routes.ts b/start/routes.ts index a643cda..9c7430f 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -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');