コード例 #1
0
        private static (bool isValid, string validationError) MeterReadingValid(GasLog log, AutomobileInfo auto)
        {
            if (log == null)
            {
                throw new ArgumentNullException(nameof(log));
            }
            if (auto == null)
            {
                throw new ArgumentNullException(nameof(auto));
            }

            if (auto.MeterReading <= 0)
            {
                return(false, "The automobile's meter reading is invalid");
            }

            // automobile's meter reading should less then new meter reading
            if (auto.MeterReading > log.CurrentMeterReading.TotalKilometre)
            {
                return(false, "The automobile's meter reading is larger then gas log");
            }

            // the difference between current automobile meter reading and new meter reading should greater then log distance
            if (log.CurrentMeterReading - Dimension.FromKilometer(auto.MeterReading) < log.Distance)
            {
                return(false, "The logging distance is invalid");
            }

            return(log.CurrentMeterReading - Dimension.FromKilometer(auto.MeterReading) != log.Distance
                ? (true, "Current log distance plus automobile's current meter reading does not match log's current meter reading")
                : (true, string.Empty));
        }
コード例 #2
0
 public void CanAddGasLogHistory()
 {
     // Arrange
     const string comment  = "This is a test gas log";
     var          car      = _autoManager.GetEntityById(1);
     var          discount = _discountManager.GetEntities().FirstOrDefault();
     var          logDate  = new DateTime(2019, 12, 25);
     var          gasLog   = new GasLog
     {
         Date                = logDate,
         Car                 = car,
         Station             = "Costco",
         Gas                 = Volume.FromLiter(40),
         Price               = new Money(40.0),
         Distance            = Dimension.FromKilometer(300),
         CurrentMeterReading = Dimension.FromKilometer(12000),
         Discounts           = new List <GasDiscountInfo>
         {
             new()
             {
                 Amount  = new Money(0.8),
                 Program = discount
             }
         },
コード例 #3
0
        public MappingProfile()
        {
            // Author
            CreateMap <ApiAuthor, Author>()
            .ForMember(d => d.Role, opt => opt.MapFrom(src => Enum.Parse(typeof(AuthorRoleType), src.Role, true)));
            CreateMap <Author, ApiAuthor>()
            .ForMember(d => d.Role, opt => opt.MapFrom(src => src.Role.ToString().ToLower()));
            CreateMap <ApiAuthorForCreate, Author>();
            CreateMap <ApiAuthorForUpdate, Author>();
            CreateMap <Author, ApiAuthorForUpdate>();
            CreateMap <PageList <Author>, PageList <ApiAuthor> >()
            .ConvertUsing(new PageListConverter <Author, ApiAuthor>());

            // Render
            CreateMap <ApiNoteRender, NoteRender>();
            CreateMap <NoteRender, ApiNoteRender>();
            CreateMap <ApiNoteRenderForCreate, NoteRender>();
            CreateMap <ApiNoteRenderForUpdate, NoteRender>();
            CreateMap <NoteRender, ApiNoteRenderForUpdate>();
            CreateMap <PageList <NoteRender>, PageList <ApiNoteRender> >()
            .ConvertUsing(new PageListConverter <NoteRender, ApiNoteRender>());

            // Catalog
            CreateMap <ApiNoteCatalog, NoteCatalog>();
            CreateMap <NoteCatalog, ApiNoteCatalog>()
            .ForMember(c => c.SubsystemId, opt => opt.MapFrom(s => s.Subsystem.Id))
            .ForMember(c => c.RenderId, opt => opt.MapFrom(s => s.Render.Id));

            CreateMap <ApiNoteCatalogForCreate, NoteCatalog>();
            CreateMap <ApiNoteCatalogForUpdate, NoteCatalog>();
            CreateMap <NoteCatalog, ApiNoteCatalogForUpdate>();
            CreateMap <PageList <NoteCatalog>, PageList <ApiNoteCatalog> >()
            .ConvertUsing(new PageListConverter <NoteCatalog, ApiNoteCatalog>());

            // Subsystem
            CreateMap <Subsystem, ApiSubsystem>()
            .ForMember(t => t.DefaultAuthorId, opt => opt.MapFrom(s => s.DefaultAuthor.Id))
            .ForMember(t => t.NoteCatalogIds, opt => opt.MapFrom(s => s.NoteCatalogs.Select(c => c.Id).ToList()));
            CreateMap <ApiSubsystem, Subsystem>();
            CreateMap <ApiSubsystemForUpdate, Subsystem>();
            CreateMap <Subsystem, ApiSubsystemForUpdate>();
            CreateMap <PageList <Subsystem>, PageList <ApiSubsystem> >()
            .ConvertUsing(new PageListConverter <Subsystem, ApiSubsystem>());

            // Note
            CreateMap <Core.DomainEntity.HmmNote, ApiNote>()
            .ForMember(n => n.AuthorId, opt => opt.MapFrom(s => s.Author.Id))
            .ForMember(n => n.CatalogId, opt => opt.MapFrom(s => s.Catalog.Id));

            CreateMap <ApiNoteForCreate, Core.DomainEntity.HmmNote>()
            .ForMember(n => n.Author, opt => opt.MapFrom(s => new Author {
                Id = s.AuthorId
            }))
            .ForMember(n => n.Catalog, opt => opt.MapFrom(s => new NoteCatalog()
            {
                Id = s.NoteCatalogId
            }));
            CreateMap <ApiNoteForUpdate, Core.DomainEntity.HmmNote>();
            CreateMap <Core.DomainEntity.HmmNote, ApiNoteForUpdate>();
            CreateMap <PageList <Core.DomainEntity.HmmNote>, PageList <ApiNote> >()
            .ConvertUsing(new PageListConverter <Core.DomainEntity.HmmNote, ApiNote>());

            // Automobile
            CreateMap <ApiAutomobile, AutomobileInfo>();
            CreateMap <AutomobileInfo, ApiAutomobile>();
            CreateMap <ApiAutomobileForCreate, AutomobileInfo>();
            CreateMap <ApiAutomobileForUpdate, AutomobileInfo>();
            CreateMap <AutomobileInfo, ApiAutomobileForUpdate>();
            CreateMap <PageList <AutomobileInfo>, PageList <ApiAutomobile> >()
            .ConvertUsing(new PageListConverter <AutomobileInfo, ApiAutomobile>());

            // Gas Discount: setup map from domain entity to DTO
            CreateMap <GasDiscount, ApiDiscount>()
            .ForMember(d => d.Amount, opt => opt.MapFrom(s => s.Amount.Amount));
            CreateMap <GasDiscountInfo, ApiDiscountInfo>()
            .ForMember(d => d.DiscountId, opt => opt.MapFrom(s => s.Program.Id))
            .ForMember(d => d.Amount, opt => opt.MapFrom(s => s.Amount.Amount));
            CreateMap <ApiDiscountForCreate, GasDiscount>()
            .ForMember(d => d.Amount, opt => opt.MapFrom(src => new Money(src.Amount, CurrencyCodeType.Cad)));
            CreateMap <ApiDiscountForUpdate, GasDiscount>()
            .ForMember(d => d.Amount, opt => opt.MapFrom(src => new Money(src.Amount, CurrencyCodeType.Cad)));
            CreateMap <GasDiscount, ApiDiscountForUpdate>()
            .ForMember(d => d.Amount, opt => opt.MapFrom(src => src.Amount.Amount));
            CreateMap <PageList <GasDiscount>, PageList <ApiDiscount> >()
            .ConvertUsing(new PageListConverter <GasDiscount, ApiDiscount>());

            // Gas Log
            CreateMap <GasLog, ApiGasLog>()
            .ForMember(d => d.CarId, opt => opt.MapFrom(s => s.Car.Id))
            .ForMember(d => d.Distance, opt => opt.MapFrom(s => s.Distance.TotalKilometre))
            .ForMember(d => d.CurrentMeterReading, opt => opt.MapFrom(s => s.CurrentMeterReading.TotalKilometre))
            .ForMember(d => d.Gas, opt => opt.MapFrom(s => s.Gas.TotalLiter))
            .ForMember(d => d.Price, opt => opt.MapFrom(s => s.Price.Amount))
            .ForMember(d => d.DiscountInfos, opt => opt.MapFrom(s => s.Discounts))
            .ForMember(d => d.GasStation, opt => opt.MapFrom(s => s.Station));
            CreateMap <ApiGasLogForCreation, GasLog>()
            .ForMember(d => d.Distance, opt => opt.MapFrom(s => Dimension.FromKilometer(s.Distance)))
            .ForMember(d => d.CurrentMeterReading, opt => opt.MapFrom(s => Dimension.FromKilometer(s.CurrentMeterReading)))
            .ForMember(d => d.Gas, opt => opt.MapFrom(s => Volume.FromLiter(s.Gas)))
            .ForMember(d => d.Price, opt => opt.MapFrom(s => new Money(s.Price)))
            .ForMember(d => d.Discounts, opt => opt.Ignore())
            .ForMember(d => d.Car, opt => opt.Ignore())
            .ForMember(d => d.Station, opt => opt.MapFrom(src => src.GasStation));
            CreateMap <ApiGasLog, GasLog>()
            .ForMember(d => d.Car, opt => opt.MapFrom(src => new AutomobileInfo {
                Id = src.CarId
            }))
            .ForMember(d => d.Distance, opt => opt.MapFrom(src => Dimension.FromKilometer(src.Distance)))
            .ForMember(d => d.CurrentMeterReading, opt => opt.MapFrom(src => Dimension.FromKilometer(src.CurrentMeterReading)))
            .ForMember(d => d.Gas, opt => opt.MapFrom((src => Volume.FromLiter(src.Gas))))
            .ForMember(d => d.Price, opt => opt.MapFrom(src => new Money(src.Price)))
            .ForMember(d => d.Station, opt => opt.MapFrom(src => src.GasStation));
            CreateMap <PageList <GasLog>, PageList <ApiGasLog> >()
            .ConvertUsing(new PageListConverter <GasLog, ApiGasLog>());
        }