add chat and users
This commit is contained in:
120
src/GreenHome.Api/Controllers/DeviceMembersController.cs
Normal file
120
src/GreenHome.Api/Controllers/DeviceMembersController.cs
Normal file
@@ -0,0 +1,120 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using GreenHome.Application;
|
||||
|
||||
namespace GreenHome.Api.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
public class DeviceMembersController : ControllerBase
|
||||
{
|
||||
private readonly IDeviceMemberService _memberService;
|
||||
private readonly IWebHostEnvironment _environment;
|
||||
private readonly ILogger<DeviceMembersController> _logger;
|
||||
|
||||
public DeviceMembersController(
|
||||
IDeviceMemberService memberService,
|
||||
IWebHostEnvironment environment,
|
||||
ILogger<DeviceMembersController> logger)
|
||||
{
|
||||
_memberService = memberService;
|
||||
_environment = environment;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>لیست اعضای تیم یک دستگاه</summary>
|
||||
[HttpGet]
|
||||
public async Task<ActionResult<IReadOnlyList<DeviceMemberDto>>> List(
|
||||
[FromQuery] int deviceId,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var result = await _memberService.ListByDeviceAsync(deviceId, cancellationToken);
|
||||
return Ok(result);
|
||||
}
|
||||
|
||||
/// <summary>افزودن یا ویرایش عضو تیم</summary>
|
||||
[HttpPost]
|
||||
public async Task<ActionResult<DeviceMemberDto>> Upsert(
|
||||
[FromBody] UpsertDeviceMemberRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await _memberService.UpsertAsync(request, cancellationToken);
|
||||
return Ok(result);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error upserting device member");
|
||||
return BadRequest(new { error = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>حذف عضو تیم</summary>
|
||||
[HttpDelete]
|
||||
public async Task<ActionResult> Delete(
|
||||
[FromQuery] int deviceId,
|
||||
[FromQuery] int userId,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _memberService.DeleteAsync(deviceId, userId, cancellationToken);
|
||||
return Ok(new { message = "عضو با موفقیت حذف شد" });
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
return NotFound(new { error = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>بررسی مجوز مدیریت تیم</summary>
|
||||
[HttpGet("can-manage")]
|
||||
public async Task<ActionResult<bool>> CanManage(
|
||||
[FromQuery] int actorUserId,
|
||||
[FromQuery] int deviceId,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var canManage = await _memberService.CanManageDeviceAsync(actorUserId, deviceId, cancellationToken);
|
||||
return Ok(new { canManage });
|
||||
}
|
||||
|
||||
/// <summary>آپلود آواتار عضو</summary>
|
||||
[HttpPost("avatar")]
|
||||
[Consumes("multipart/form-data")]
|
||||
public async Task<ActionResult<string>> UploadAvatar(
|
||||
[FromForm] IFormFile file,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (file == null || file.Length == 0)
|
||||
return BadRequest(new { error = "فایل انتخاب نشده است" });
|
||||
|
||||
var allowedTypes = new[] { "image/jpeg", "image/jpg", "image/png", "image/webp" };
|
||||
if (!allowedTypes.Contains(file.ContentType.ToLower()))
|
||||
return BadRequest(new { error = "فقط فایلهای تصویری مجاز هستند" });
|
||||
|
||||
if (file.Length > 2 * 1024 * 1024)
|
||||
return BadRequest(new { error = "حجم آواتار نباید بیشتر از 2 مگابایت باشد" });
|
||||
|
||||
var uploadsFolder = Path.Combine(_environment.WebRootPath ?? "wwwroot", "uploads", "avatars");
|
||||
Directory.CreateDirectory(uploadsFolder);
|
||||
|
||||
var fileName = $"{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
|
||||
var filePath = Path.Combine(uploadsFolder, fileName);
|
||||
|
||||
await using (var stream = new FileStream(filePath, FileMode.Create))
|
||||
{
|
||||
await file.CopyToAsync(stream, cancellationToken);
|
||||
}
|
||||
|
||||
var relativePath = $"/uploads/avatars/{fileName}";
|
||||
return Ok(new { avatarPath = relativePath, message = "آواتار با موفقیت آپلود شد" });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error uploading avatar");
|
||||
return StatusCode(500, new { error = "خطا در آپلود آواتار" });
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user