Enums - gro1vy/DeliverServiceAPI GitHub Wiki
В проекте используются перечисления для фиксации определенных числовых констант с их именем и описанием с помощью атрибута [Description("...")], причем этот атрибут есть не у всех перечислений.
Также стоит отметить что абсолютно на всех перечислениях присутствует атрибут [JsonConverter(typeof(JsonStringEnumConverter))], который необходим для того, чтобы asp.net автоматически отправлял в ответах клиенту не числа, а названия констант.
Здесь представлены все перечисления, которые были созданы специально для проекта. Рассмотрим каждый по отдельности, перечисляя места где атрибут используется.
DishCategory
Данная модель предназначена для указании в Dish и DishDTO, к какой категории относится данное блюдо, про эти модели можно найти информацию в вики в разделах БД и DTO.
public enum DishCategory
{
Wok = 1,
Pizza = 2,
Soup = 3,
Desert = 4,
Drink = 5
}
DishSorting
Данная модель предназначена для указании в методе контроллера DishController и в методе сервиса DishService, по какому параметру идет сортировка, про эти контроллер и сервис можно найти информацию в вики в разделах Services и Controllers.
public enum DishSorting
{
NameAsc,
NameDesc,
PriceAsc,
PriceDesc,
RatingAsc,
RatingDesc
}
GarAddressLevel
Данная модель предназначена для указании в AddressElement и SearchAddressDTO, к какой категории относится данный адресный элемент, про эти модели можно найти информацию в вики в разделах БД и DTO.
public enum GarAddressLevel
{
[Description("Субъект РФ")] Region = 1,
[Description("Административный район")] AdministrativeArea = 2,
[Description("Муниципальный район")] MunicipalArea = 3,
[Description("Сельское/городское поселение")] RuralUrbanSettlement = 4,
[Description("Город")] City = 5,
[Description("Населенный пункт")] Locality = 6,
[Description("Элемент планировочной структуры")] ElementOfPlanningStructure = 7,
[Description("Элемент улично-дорожной сети")] ElementOfRoadNetwork = 8,
[Description("Земельный участок")] Land = 9,
[Description("Здание (сооружение)")] Building = 10,
[Description("Помещение")] Room = 11,
[Description("Помещения в пределах помещения")] RoomInRooms = 12,
[Description("Уровень автономного округа (устаревшее)")] AutonomousRegionLevel = 13,
[Description("Уровень внутригородской территории (устаревшее)")] IntracityLevel = 14,
[Description("Уровень дополнительных территорий (устаревшее)")] AdditionalTerritoriesLevel = 15,
[Description("Уровень объектов на дополнительных территориях (устаревшее)")] LevelOfObjectsInAdditionalTerritories = 16,
[Description("Машино-место")] CarPlace = 17
}
Gender
Данная модель предназначена для указании в User, RegistrationRequestDTO, UserEditRequestDTO и UserResponseDTO, к какому полу относится данный пользователь, про эти модели можно найти информацию в вики в разделах БД и DTO.
public enum Gender
{
Male,
Female
}
HouseType
Данная модель предназначена для указании в House, к какому типу относится данный дом, про эту модель можно найти информацию в вики в разделе БД.
public enum HouseType
{
[Description("влд.")] ownership = 1,
[Description("д.")] house = 2,
[Description("двлд.")] household = 3,
[Description("г-ж")] garage = 4,
[Description("зд.")] building = 5,
[Description("шахта")] mine = 6,
[Description("стр.")] structure = 7,
[Description("соор.")] facility = 8,
[Description("литера")] letter = 9,
[Description("к.")] corpus = 10,
[Description("подв.")] basement = 11,
[Description("кот.")] boilerRoom = 12,
[Description("п-б")] cellar = 13,
[Description("ОНС")] constructionInProgress = 14
}
Status
Данная модель предназначена для указании в Order, OrderDTO и OrderInfoDTO, какой статус имеет заказ, про эти модели можно найти информацию в вики в разделах БД и DTO.
public enum Status
{
InProcess = 1,
Delivered = 2
}
EnumExtensions
В некоторых случаях требуется получить название константы перечисления, для этого был создан статический класс для взятия названия, либо описание, если оно есть, константы.
Используется в конструкторе SearchAddressDTO для получения описания перечисления GarAddressLevel.
public static class EnumExtensions
{
public static string GetDescription(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
if (field != null)
{
DescriptionAttribute attribute = field.GetCustomAttribute<DescriptionAttribute>();
if (attribute != null)
{
return attribute.Description;
}
}
return value.ToString();
}
}