Compare commits

...

7 commits

6 changed files with 62 additions and 14 deletions

View file

@ -4,4 +4,5 @@ public class ProductTableGet
{
public string ProductTableName { get; set; }
public string ProductTableId { get; set; }
public string CompanyTableId { get; set; }
}

View file

@ -35,7 +35,7 @@ public class AdminOnlyHandler : AuthorizationHandler<AdminOnlyRequirement>
}
catch (NotFoundException _)
{
throw new ForbiddenException();
throw new ForbiddenException("You need to be logged in to do this action.");
}
if (_userProfileService.IsUserProfileAdmin(userProfile))

View file

@ -1,38 +1,70 @@
namespace DrinkRateAPI.Exceptions;
public abstract class DrinkRateException : Exception;
public class DrinkRateException : Exception
{
public DrinkRateException() : base() { }
public DrinkRateException(string message) : base(message) { }
}
/// <summary>
/// 400 - Bad request
/// </summary>
public class BadRequestException : DrinkRateException;
public class BadRequestException : DrinkRateException
{
public BadRequestException() : base() { }
public BadRequestException(string message) : base(message) { }
}
/// <summary>
/// 401 - Unauthenticated
/// </summary>
public class UnauthenticatedException : DrinkRateException;
public class UnauthenticatedException : DrinkRateException
{
public UnauthenticatedException() : base() { }
public UnauthenticatedException(string message) : base(message) { }
}
/// <summary>
/// 402 - Payment required
/// </summary>
public class PaymentRequiredException : DrinkRateException;
public class PaymentRequiredException : DrinkRateException
{
public PaymentRequiredException() : base() { }
public PaymentRequiredException(string message) : base(message) { }
}
/// <summary>
/// 403 - Forbidden
/// </summary>
public class ForbiddenException : DrinkRateException;
public class ForbiddenException : DrinkRateException
{
public ForbiddenException() : base() { }
public ForbiddenException(string message) : base(message) { }
}
/// <summary>
/// 404 - Not found
/// </summary>
public class NotFoundException : DrinkRateException;
public class NotFoundException : DrinkRateException
{
public NotFoundException() : base() { }
public NotFoundException(string message) : base(message) { }
}
/// <summary>
/// 418 - I'm a teapot
/// </summary>
public class IamATeapotException : DrinkRateException;
public class IamATeapotException : DrinkRateException
{
public IamATeapotException() : base() { }
public IamATeapotException(string message) : base(message) { }
}
/// <summary>
/// 451 - Unavailable for lagal reasons
/// </summary>
public class UnavailableForLagalReasonsException : DrinkRateException;
public class UnavailableForLagalReasonsException : DrinkRateException
{
public UnavailableForLagalReasonsException() : base() { }
public UnavailableForLagalReasonsException(string message) : base(message) { }
}

View file

@ -13,7 +13,7 @@ public class ApplicationUserService(ApplicationDbContext context)
{
var appUserId = identity.FindFirst(ClaimTypes.NameIdentifier)?.Value;
var profile = await _context.UserProfiles
.FirstOrDefaultAsync(x => x.ApplicationUserId.ToString() == appUserId)
.FirstOrDefaultAsync(x => x.ApplicationUserId.ToString() == appUserId && !x.IsDeleted)
?? throw new NotFoundException();
return profile;

View file

@ -4,6 +4,7 @@ using DrinkRateAPI.Contexts;
using DrinkRateAPI.DbEntities;
using DrinkRateAPI.Exceptions;
using Microsoft.EntityFrameworkCore;
using Npgsql;
namespace DrinkRateAPI.Services;
@ -24,7 +25,20 @@ public class ProductCompanyTableCoupleService(ApplicationDbContext context)
};
_context.CompanyTable.Add(companyTable);
await _context.SaveChangesAsync();
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException ex) when
(ex.InnerException is PostgresException
{
SqlState: PostgresErrorCodes.UniqueViolation
}
)
{
throw new BadRequestException("Product table or company table with the same name already exists.");
}
return await GetProductCompanyTableCouplePostResponse(
productCompanyTableCouplePost.ProductTableName,

View file

@ -15,12 +15,13 @@ public class ProductTableService(ApplicationDbContext context)
{
var productTable =
await _context.ProductTable.FirstOrDefaultAsync(x => x.ProductTableName == productTableName) ??
throw new NotFoundException();
throw new NotFoundException($"Product table with the name {productTableName} not found.");
return new ProductTableGet
{
ProductTableName = productTable.ProductTableName,
ProductTableId = productTable.Id.ToString()
ProductTableId = productTable.Id.ToString(),
CompanyTableId = productTable.CompanyTableId.ToString(),
};
}
}