Changeset 22439d3


Ignore:
Timestamp:
12/09/25 13:21:49 (10 months ago)
Author:
Stefan-Saveski <stefan@…>
Branches:
master
Children:
2d64b2e
Parents:
bb656bc
Message:

Changed appdb context injection location.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Services/Implementations/AuthService.cs

    rbb656bc r22439d3  
    88using iknow_api.Repositories;
    99using Microsoft.IdentityModel.Tokens;
     10using iknow_api.Data;
     11using Microsoft.EntityFrameworkCore;
    1012
    1113namespace iknow_api.Services
     
    1719        private readonly IRefreshTokenService _refreshTokenService;
    1820        private readonly IConfiguration _configuration;
     21        private readonly AppDbContext _context;
    1922
    20         public AuthService(IUserRepository userRepository, IConfiguration configuration
    21                             , IRefreshTokenService refreshTokenService, IRefreshTokenRepository refreshTokenRepository)
     23        public AuthService(IUserRepository userRepository, IConfiguration configuration,
     24                            IRefreshTokenService refreshTokenService, IRefreshTokenRepository refreshTokenRepository,
     25                            AppDbContext context)
    2226        {
    2327            _userRepository = userRepository;
     
    2529            _refreshTokenService = refreshTokenService;
    2630            _refreshTokenRepository = refreshTokenRepository;
     31            _context = context;
    2732        }
    2833
     
    4449                throw new InvalidOperationException("User with this email already exists");
    4550
    46             var user = new User
     51            // Use a transaction to ensure all entities are saved together
     52            using var transaction = await _context.Database.BeginTransactionAsync();
     53            try
    4754            {
    48                 Name = registerDto.Name,
    49                 Surname = registerDto.Surname,
    50                 Index = registerDto.Index,
    51                 Email = registerDto.Email,
    52                 PasswordHash = BCrypt.Net.BCrypt.HashPassword(registerDto.Password),
    53                 Bday = DateTime.SpecifyKind(registerDto.Bday, DateTimeKind.Utc),
    54                 CreatedAt = DateTime.UtcNow,
    55                 Role = (Models.UserRole)registerDto.Role,
    56                 EMBG = registerDto.EMBG
    57             };
     55                var user = new User
     56                {
     57                    Name = registerDto.Name,
     58                    Surname = registerDto.Surname,
     59                    Index = registerDto.Index,
     60                    Email = registerDto.Email,
     61                    PasswordHash = BCrypt.Net.BCrypt.HashPassword(registerDto.Password),
     62                    Bday = DateTime.SpecifyKind(registerDto.Bday, DateTimeKind.Utc),
     63                    CreatedAt = DateTime.UtcNow,
     64                    Role = (Models.UserRole)registerDto.Role,
     65                    EMBG = registerDto.EMBG
     66                };
    5867
    59             await _userRepository.AddUserAsync(user);
    60             int userId = user.Id;
    61             var contactInfo = new ContactInfo
     68                _context.User.Add(user);
     69                await _context.SaveChangesAsync();
     70               
     71                int userId = user.Id;
     72               
     73                var contactInfo = new ContactInfo
     74                {
     75                    UserId = userId,
     76                    city = registerDto.city,
     77                    address = registerDto.address,
     78                    municipality = registerDto.municipality,
     79                    phoneNumber = registerDto.phoneNumber,
     80                    microsoftEmail = registerDto.microsoftEmail
     81                };
     82               
     83                var enrollmentInfo = new EnrollmentInfo
     84                {
     85                    UserId = userId,
     86                    enrollmentYear = registerDto.enrollmentYear,
     87                    quota = (Models.Quota)registerDto.quotaType,
     88                    MajorId = registerDto.majorType
     89                };
     90               
     91                var highSchool = new HighSchool
     92                {
     93                    UserId = userId,
     94                    GPA = registerDto.gpa,
     95                    tip = (Models.type)registerDto.tip
     96                };
     97
     98                _context.ContactInfo.Add(contactInfo);
     99                _context.EnrollmentInfo.Add(enrollmentInfo);
     100                _context.HighSchool.Add(highSchool);
     101               
     102                // Save all related entities in a single transaction
     103                await _context.SaveChangesAsync();
     104                await transaction.CommitAsync();
     105               
     106                return true;
     107            }
     108            catch
    62109            {
    63                 UserId = userId,
    64                 city = registerDto.city,
    65                 address = registerDto.address,
    66                 municipality = registerDto.municipality,
    67                 phoneNumber = registerDto.phoneNumber,
    68                 microsoftEmail = registerDto.microsoftEmail
    69             };
    70             await _userRepository.AddContactAsync(contactInfo);
    71             var enrollmentInfo = new EnrollmentInfo
    72             {
    73                 UserId = userId,
    74                 enrollmentYear = registerDto.enrollmentYear,
    75                 quota = (Models.Quota)registerDto.quotaType,
    76                 MajorId = registerDto.majorType
    77             };
    78             await _userRepository.AddEnrollmentAsync(enrollmentInfo);
    79             await _userRepository.AddHighSchoolAsync(new HighSchool
    80             {
    81                 UserId = userId,
    82                 GPA = registerDto.gpa,
    83                 tip = (Models.type)registerDto.tip
    84             });
    85             return true;
     110                await transaction.RollbackAsync();
     111                throw;
     112            }
    86113        }
    87114
     
    99126            if (loginDto.GenerateRefreshToken)
    100127            {
    101                 int userid = _userRepository.GetUserByUsernameAsync(loginDto.Email).Id;
    102                 result.RefreshToken = await _refreshTokenService.GenerateRefreshToken(userid);
     128                result.RefreshToken = await _refreshTokenService.GenerateRefreshToken(user.Id);
    103129            }
    104130
Note: See TracChangeset for help on using the changeset viewer.