Data Model

namespace Offer
{

    public class OfferListModel
    {
        /// <summary>
        /// Unique offer Id
        /// </summary>
        [Required]
        public Guid OfferId { get; set; }

        /// <summary>
        /// Offer Short Name
        /// </summary>
        [MaxLength(256)]
        public string SlugName { get; set; }

        /// <summary>
        /// The Name of the offer
        /// </summary>
        [MaxLength(500)]
        [Required]
        public string OfferName { get; set; }

        /// <summary>
        /// The offer Number
        /// </summary>
        public string OfferNumber { get; set; }

        /// <summary>
        /// The offer Status
        /// </summary>
        [MaxLength(20)]
        [Required]
        public string OfferStatus { get; set; }

        /// <summary>
        /// Offer Category Name
        /// </summary>
        [MaxLength(200)]
        [Required]
        public string CategoryName { get; set; }

        /// <summary>
        /// The type of offer
        /// </summary>
        [MaxLength(200)]
        [Required]
        public string OfferTypeName { get; set; }

        /// <summary>
        /// The Merchant Id associated with the offer
        /// </summary>
        [Required]
        public Guid MerchantId { get; set; }

        /// <summary>
        /// The Merchant Name associated with the offer
        /// </summary>
        [MaxLength(200)]
        [Required]
        public string MerchantName { get; set; }

        /// <summary>
        /// The Trading Name of Merchant associated with the offer
        /// </summary>
        //public string TradingName { get; set; }

        /// <summary>
        /// Offer active from date
        /// </summary>
        public Nullable<DateTime> ActiveFrom { get; set; }

        /// <summary>
        /// Offer active to date
        /// </summary>
        public Nullable<DateTime> ActiveTo { get; set; }

        /// <summary>
        /// A unique offer identifier
        /// </summary>
        [MaxLength(50)]
        public string UniqueOfferIdentifier { get; set; }

        /// <summary>
        /// Offer Created Date
        /// </summary>
        [Required]
        public DateTime CreatedOn { get; set; }

        /// <summary>
        /// Offer Modified Date
        /// </summary>
        public Nullable<DateTime> ModifiedOn { get; set; }

        /// <summary>
        /// Offer Rate
        /// </summary>
        [Required]
        public decimal Rate { get; set; }

        /// <summary>
        /// Offer Release date
        /// </summary>
        public Nullable<DateTime> ReleaseDate { get; set; }

        /// <summary>
        /// Boosted Campaign Hours
        /// </summary>
        public List<OfferTypeTradingHours> BoostedCampaignHours { get; set; }

        /// <summary>
        /// Locations Mapped to this offer
        /// </summary>
        public int[] MappedLocations { get; set; }

        /// <summary>
        /// Denotes if the MID for all mapped locations is Verified
        /// </summary>
        public bool IsValidMID { get; set; }
    }

    public class OfferDetailModel : OfferListModel
    {
        /// <summary>
        /// The offer display value
        /// </summary>
        [MaxLength(200)]
        public string DisplayValue { get; set; }

        /// <summary>
        /// The description of offer
        /// </summary>
        [MaxLength(1024)]
        public string OfferDescription { get; set; }

        /// <summary>
        /// The terms of offer
        /// </summary>
        [MaxLength(500)]
        public string OfferTerms { get; set; }

        /// <summary>
        /// List of offer images
        /// </summary>
        public IEnumerable<OfferImageDetail> OfferImagesList { get; set; }
    }

    public class OfferImageDetail
    {
        /// <summary>
        /// The Unique Id of the Image
        /// </summary>
        [Required]
        public int Id { get; set; }

        /// <summary>
        /// The filename of the Image
        /// </summary>
        [MaxLength(500)]
        [Required]
        public string FileName { get; set; }

        /// <summary>
        /// The web URL of the Image
        /// </summary>
        [MaxLength(600)]
        [Required]
        public string PreSignedUrl { get; set; }
    }

    public class OfferMarketPlaceListModel
    {
        public int MerchantId { get; set; }
    }

    public class OfferValidateModel
    {
        /// <summary>
        /// Shows if offer is valid or not
        /// </summary>
        [Required]
        public bool IsValid { get; set; }
    }

    public class OfferMerchantLocation
    {
        public int? LocationId { get; set; }
        public string LocationMerchantName { get; set; }
        public string LocationTradingName { get; set; }
        public string LocationType { get; set; }
        public string LocationMID { get; set; }
    }

    public class OfferTypeTradingHours
    {
        /// <summary>
        /// Boosted Campaign Hours Id
        /// </summary>
        [Required]
        public int Id { get; set; }

        /// <summary>
        /// The Day of the week
        /// </summary>
        [MaxLength(50)]
        [Required]
        public string Day { get; set; }

        /// <summary>
        /// Offer Start time
        /// </summary>
        [MaxLength(50)]
        [Required]
        public string OpenTime { get; set; }

        /// <summary>
        /// Offer End Time
        /// </summary>
        [MaxLength(50)]
        [Required]
        public string CloseTime { get; set; }

        /// <summary>
        /// Offer Open/Close Status
        /// </summary>
        [MaxLength(50)]
        [Required]
        public string Status { get; set; }
        public string CompareFromDay { get; set; }

        public string CompareToDay { get; set; }
    }
}