Exemple #1
0
        public async Task <IActionResult> SignUp([FromBody] RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Добавляем нового юзера, если указанного Email еще нет в бд
                User user = await _db.Users.FirstOrDefaultAsync(u => u.Email == model.Email);

                if (user == null)
                {
                    // ищем роль
                    RolesScroll roleKey    = model.Doctor == true ? RolesScroll.Doctor : RolesScroll.Patient;
                    int         intRoleKey = (int)roleKey;
                    Role        userRole   = await _db.Roles.FirstOrDefaultAsync(r => r.Id == intRoleKey);

                    // добавляем пользователя в бд
                    User newUser = new User()
                    {
                        Email = model.Email, Fio = model.Fio, Password = model.GetPassword(), RoleKey = userRole.Id
                    };
                    _db.Users.Add(newUser);
                    await _db.SaveChangesAsync();

                    // добавляем врача или пациента
                    switch (roleKey)
                    {
                    case RolesScroll.Doctor:

                        Doctor newDoctor = new Doctor()
                        {
                            User = newUser
                        };
                        _db.Doctors.Add(newDoctor);

                        // Jcjeifi fiwwdmccp, cmwicw98jc __dee9c0+ckei ncdjnj
                        for (int i = 1; i <= 5; i++)
                        {
                            DoctorWorkingTime newWorkingDay = new DoctorWorkingTime()
                            {
                                Start         = "08:00",
                                End           = "20:00",
                                Doctor        = newDoctor,
                                WeekdayNumber = i,
                            };
                            _db.DoctorWorkingTimes.Add(newWorkingDay);
                        }

                        break;

                    case RolesScroll.Patient:

                        Patient newPatient = new Patient()
                        {
                            User = newUser
                        };
                        _db.Patients.Add(newPatient);
                        break;
                    }
                    await _db.SaveChangesAsync();

                    // генерим токен с данными пользователя, чтоб юзер бл сразу авторизованным после регистрации
                    var    identity = GetIdentity(model.Email, model.GetPassword());
                    string jwt      = GenJWT(identity);
                    var    response = new
                    {
                        access_token = jwt
                    };

                    return(Ok(response));
                }
                else
                {
                    return(BadRequest(new { errorText = "Пользователь с таким емейлом уже зарегистрирован." }));
                }
            }
            return(BadRequest(model));
        }