mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 08:23:12 +00:00
Stop client writes from changing Locations.AccountId, make the SH-221 migration discoverable, and thread the board-create CancellationToken through lookup and persistence.
133 lines
4.2 KiB
C#
133 lines
4.2 KiB
C#
using Data.SeaHavenIndustries;
|
|
using SeaHaven.Services.DTOs;
|
|
|
|
namespace Api.SeaHavenIndustries.DTOs
|
|
{
|
|
public class Location_DTO
|
|
{
|
|
public string? Title { get; set; }
|
|
public string? Name { get; set; }
|
|
public string? Address { get; set; }
|
|
public string? City { get; set; }
|
|
public string? State { get; set; }
|
|
public string? ZipCode { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? Contact { get; set; }
|
|
public string? ContactEmail { get; set; }
|
|
public string? Status { get; set; }
|
|
public string? AccountId { get; set; }
|
|
|
|
public int? GetAccountId() =>
|
|
int.TryParse(AccountId, out var id) ? id : null;
|
|
|
|
// ✅ Map API DTO to Service DTO
|
|
public CreateLocationDTO ToServiceCreateDTO()
|
|
{
|
|
return new CreateLocationDTO
|
|
{
|
|
LocationName = this.Name ?? "",
|
|
Address = this.Address,
|
|
City = this.City,
|
|
State = this.State,
|
|
Zipcode = this.ZipCode
|
|
};
|
|
}
|
|
|
|
// Map from Entity to DTO
|
|
public static Location_DTO MapToModel(Locations entity)
|
|
{
|
|
return new Location_DTO
|
|
{
|
|
Title = entity.Title,
|
|
Name = entity.Name,
|
|
Address = entity.Address1,
|
|
City = entity.City,
|
|
State = entity.State,
|
|
ZipCode = entity.Zip,
|
|
Phone = entity.PhoneNumber,
|
|
Contact = null, // Not in database schema
|
|
ContactEmail = entity.Email,
|
|
Status = entity.Status,
|
|
AccountId = entity.AccountId?.ToString()
|
|
};
|
|
}
|
|
|
|
// Map from DTO to Entity
|
|
public static Locations MapToEntity(Location_DTO dto, Locations? existingEntity = null)
|
|
{
|
|
var entity = existingEntity ?? new Locations();
|
|
|
|
entity.Title = dto.Title;
|
|
entity.Name = dto.Name;
|
|
entity.Address1 = dto.Address;
|
|
entity.City = dto.City;
|
|
entity.State = dto.State;
|
|
entity.Zip = dto.ZipCode;
|
|
entity.PhoneNumber = dto.Phone;
|
|
// Contact field doesn't exist in database schema - ignored
|
|
entity.Email = dto.ContactEmail;
|
|
entity.Status = dto.Status;
|
|
|
|
return entity;
|
|
}
|
|
}
|
|
|
|
// DTO for list views
|
|
public class LocationListItem_DTO
|
|
{
|
|
public int Id { get; set; }
|
|
public string? Name { get; set; }
|
|
public string? Title { get; set; }
|
|
|
|
// Map from Entity
|
|
public static LocationListItem_DTO MapToModel(Locations entity)
|
|
{
|
|
return new LocationListItem_DTO
|
|
{
|
|
Id = entity.Id,
|
|
Name = entity.Name,
|
|
Title = entity.Title
|
|
};
|
|
}
|
|
|
|
// ✅ Map from Service DTO (no logic in controller)
|
|
public static LocationListItem_DTO FromServiceDTO(LocationDTO serviceDto)
|
|
{
|
|
return new LocationListItem_DTO
|
|
{
|
|
Id = serviceDto.Id,
|
|
Name = serviceDto.Name ?? serviceDto.Title,
|
|
Title = serviceDto.Title ?? serviceDto.Name
|
|
};
|
|
}
|
|
|
|
// ✅ Map collection from Service DTOs
|
|
public static IEnumerable<LocationListItem_DTO> FromServiceDTOs(IEnumerable<LocationDTO> serviceDtos)
|
|
{
|
|
return serviceDtos.Select(FromServiceDTO);
|
|
}
|
|
}
|
|
|
|
// DTO for location dropdown/simple view
|
|
public class LocationViewModel_DTO
|
|
{
|
|
public int? Id { get; set; }
|
|
public string? Name { get; set; }
|
|
|
|
// ✅ Map from Service DTO
|
|
public static LocationViewModel_DTO FromServiceDTO(LocationDTO serviceDto)
|
|
{
|
|
return new LocationViewModel_DTO
|
|
{
|
|
Id = serviceDto.Id,
|
|
Name = serviceDto.Name ?? serviceDto.Title
|
|
};
|
|
}
|
|
|
|
// ✅ Map collection from Service DTOs
|
|
public static IEnumerable<LocationViewModel_DTO> FromServiceDTOs(IEnumerable<LocationDTO> serviceDtos)
|
|
{
|
|
return serviceDtos.Select(FromServiceDTO);
|
|
}
|
|
}
|
|
}
|