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();
    }
}