Initial QMAX production app
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using QMax.Api.Data;
|
||||
using QMax.Api.Data.Entities;
|
||||
using QMax.Api.Infrastructure.Auth;
|
||||
|
||||
namespace QMax.Api.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
[Route("api/push")]
|
||||
public sealed class PushController(QMaxDbContext db) : ControllerBase
|
||||
{
|
||||
public sealed record RegisterPushDeviceRequest(string FirebaseToken, string Platform);
|
||||
|
||||
[HttpPost("devices")]
|
||||
public async Task<IActionResult> Register(RegisterPushDeviceRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(request.FirebaseToken))
|
||||
{
|
||||
return BadRequest("firebaseToken is required.");
|
||||
}
|
||||
|
||||
var userId = User.GetUserId();
|
||||
var device = await db.PushDevices.FirstOrDefaultAsync(x => x.FirebaseToken == request.FirebaseToken, cancellationToken);
|
||||
if (device is null)
|
||||
{
|
||||
device = new PushDevice { FirebaseToken = request.FirebaseToken };
|
||||
db.PushDevices.Add(device);
|
||||
}
|
||||
|
||||
device.UserId = userId;
|
||||
device.Platform = string.IsNullOrWhiteSpace(request.Platform) ? "android" : request.Platform;
|
||||
device.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("devices/{id:guid}")]
|
||||
public async Task<IActionResult> Delete(Guid id, CancellationToken cancellationToken)
|
||||
{
|
||||
var userId = User.GetUserId();
|
||||
var device = await db.PushDevices.FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, cancellationToken);
|
||||
if (device is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
db.PushDevices.Remove(device);
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
return NoContent();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user