Files
old-svijetlastrana/application/entitymapping/ride.go
2018-04-25 13:16:36 +02:00

255 lines
7.7 KiB
Go

package entitymapping
import (
"time"
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
"bitbucket.org/nemt/nemt-portal-api/domain/entity"
)
// rideMapping has method to map ride entities to view models
type rideMapping struct {
mapper *Mapper
}
func (mapping *rideMapping) ToRideModel(item entity.Ride) viewmodel.Ride {
return viewmodel.Ride{
User: mapping.mapper.User.ToUserModel(item.User),
Status: mapping.ToRideStatusModel(item.Status),
Type: mapping.ToRideTypeModel(item.Type),
UUID: item.UUID,
Note: item.Note,
Driver: mapping.ToDriverUserModel(item.Driver),
Passenger: mapping.ToPassengerUserModel(item.Passenger),
Vehicle: mapping.ToVehicleModel(item.Vehicle),
Route: mapping.ToRouteModel(item.Route),
PickupTime: item.PickupTime,
VisitDate: item.VisitDate,
VisitTime: item.VisitTime,
InternalID: item.InternalID,
Visit: mapping.mapper.Visit.ToVisitModel(item.Visit),
CreatedUser: mapping.mapper.User.ToUserModel(item.CreatedUser),
CreateAt: item.Created,
UpdateAt: item.Updated,
TripType: mapping.mapper.Visit.ToTripTypeModel(item.TripType),
}
}
func (mapping *rideMapping) ToRideInternalEntity(item viewmodel.Ride) entity.Ride {
return entity.Ride{
User: mapping.mapper.User.ToUserEntity(item.User),
UUID: item.UUID,
Note: item.Note,
PickupTime: item.PickupTime,
VisitDate: item.VisitDate,
VisitTime: item.VisitTime,
InternalID: item.InternalID,
TripType: mapping.mapper.Visit.ToTripTypeEntity(item.TripType),
}
}
func (mapping *rideMapping) ToRouteModel(item entity.RideRoute) viewmodel.RideRoute {
return viewmodel.RideRoute{
Origin: mapping.ToLocationModel(item.Origin),
Destination: mapping.ToLocationModel(item.Destination),
RouteKML: item.RouteKML,
ETA: item.ETA,
Distance: item.Distance,
Duration: item.Duration,
}
}
func (mapping *rideMapping) ToLocationModel(item entity.Location) viewmodel.Location {
return viewmodel.Location{
ID: item.ID,
Name: item.Name,
Address: item.Address,
Latitude: item.Latitude,
Longitude: item.Longitude,
}
}
func (mapping *rideMapping) ToVehicleModel(item entity.RideVehicle) viewmodel.Vehicle {
return viewmodel.Vehicle{
Color: item.Color,
Make: item.Make,
LicensePlate: item.LicensePlate,
ImageURL: item.ImageURL,
Year: item.Year,
LicensePlateState: item.LicensePlateState,
Model: item.Model,
}
}
func (mapping *rideMapping) ToDriverUserModel(item entity.RideDriver) viewmodel.UserLyft {
return viewmodel.UserLyft{
FirstName: item.Name,
ImageURL: item.ImageURL,
PhoneNumber: item.PhoneNumber,
Rating: item.Rating,
}
}
func (mapping *rideMapping) ToPassengerUserModel(item entity.RidePassenger) viewmodel.UserLyft {
return viewmodel.UserLyft{
FirstName: item.FirstName,
LastName: item.LastName,
ImageURL: item.ImageURL,
PhoneNumber: item.PhoneNumber,
UserID: item.InternalID,
}
}
func (mapping *rideMapping) ToRideStatusModel(item entity.RideStatus) viewmodel.RideStatus {
return viewmodel.RideStatus{
Value: item.Value,
Key: item.Key,
}
}
func (mapping *rideMapping) ToRideTypeModel(item entity.RideType) viewmodel.RideType {
return viewmodel.RideType{
Value: item.Value,
Key: item.Key,
}
}
func (mapping *rideMapping) ToWebhookEntity(item viewmodel.WebhookResponse) entity.WebhookResponse {
occurredAt, _ := time.Parse(time.RFC3339Nano, item.OccurredAt)
return entity.WebhookResponse{
EventID: item.EventID,
HREF: item.HREF,
OccurredAt: occurredAt,
EventType: item.EventType,
Ride: mapping.ToRideEntity(item.Event),
}
}
// ToUserModel maps a User entity to User view model
func (mapping *rideMapping) ToRideEntity(item viewmodel.RideRequest) entity.Ride {
return entity.Ride{
User: entity.User{
UUID: item.UserUUID,
},
Status: mapping.ToRideStatusEntity(item),
Type: mapping.ToRideTypeEntity(item),
InternalID: item.RideID,
RequestDate: item.RequestAt,
RequestMiliseconds: item.RequestAtMS,
GenerateDate: item.GeneratedAt,
GenerateMiliseconds: item.GeneratedAtMS,
Note: item.Notes,
PrimetimePercentage: item.PrimetimePercentage,
Passenger: mapping.ToRidePassengerEntity(item),
Driver: mapping.ToRideDriverEntity(item),
Vehicle: mapping.ToRideVehicleEntity(item),
Route: mapping.ToRideRouteEntity(item),
PickupTime: item.PickupTime,
VisitDate: item.VisitDate,
VisitTime: item.VisitTime,
Visit: mapping.mapper.Visit.ToVisitEntity(item.Visit),
TripType: mapping.mapper.Visit.ToTripTypeEntity(item.TripType),
CreatedUser: entity.User{
UUID: item.CreateUserUUID,
},
}
}
func (mapping *rideMapping) ToRideRouteEntity(item viewmodel.RideRequest) entity.RideRoute {
return entity.RideRoute{
Origin: mapping.ToLocationEntity(item.Origin),
Destination: mapping.ToLocationEntity(item.Destination),
RouteKML: &item.RouteURL,
ETA: item.ETA,
Distance: item.Distance,
Duration: item.Duration,
}
}
func (mapping *rideMapping) ToLocationEntity(item viewmodel.Location) entity.Location {
return entity.Location{
ID: item.ID,
Name: item.Name,
Address: item.Address,
Latitude: item.Latitude,
Longitude: item.Longitude,
}
}
func (mapping *rideMapping) ToRideVehicleEntity(item viewmodel.RideRequest) entity.RideVehicle {
return entity.RideVehicle{
Color: item.Vehicle.Color,
Make: item.Vehicle.Make,
LicensePlate: item.Vehicle.LicensePlate,
LicensePlateState: item.Vehicle.LicensePlateState,
ImageURL: item.Vehicle.ImageURL,
Model: item.Vehicle.Model,
Year: item.Vehicle.Year,
}
}
func (mapping *rideMapping) ToRideDriverEntity(item viewmodel.RideRequest) entity.RideDriver {
return entity.RideDriver{
Name: item.Driver.FirstName,
ImageURL: item.Driver.ImageURL,
PhoneNumber: item.Driver.PhoneNumber,
Rating: item.Driver.Rating,
}
}
func (mapping *rideMapping) ToRidePassengerEntity(item viewmodel.RideRequest) entity.RidePassenger {
return entity.RidePassenger{
FirstName: item.Passenger.FirstName,
LastName: item.Passenger.LastName,
ImageURL: item.Passenger.ImageURL,
PhoneNumber: item.Passenger.PhoneNumber,
InternalID: item.Passenger.UserID,
}
}
func (mapping *rideMapping) ToRideStatusEntity(item viewmodel.RideRequest) entity.RideStatus {
return entity.RideStatus{
Key: item.Status,
}
}
func (mapping *rideMapping) ToRideTypeEntity(item viewmodel.RideRequest) entity.RideType {
return entity.RideType{
Key: item.RideType,
}
}
// ToUserEntitySlice maps a User entity slice to User view model slice
func (mapping *rideMapping) ToRideEntitySlice(list []viewmodel.RideRequest) (retVal []entity.Ride) {
retVal = make([]entity.Ride, 0)
for _, item := range list {
retVal = append(retVal, mapping.ToRideEntity(item))
}
return retVal
}
// ToUserEntitySlice maps a User entity slice to User view model slice
func (mapping *rideMapping) ToRideInternalEntitySlice(list []viewmodel.Ride) (retVal []entity.Ride) {
retVal = make([]entity.Ride, 0)
for _, item := range list {
retVal = append(retVal, mapping.ToRideInternalEntity(item))
}
return retVal
}
// ToRideModelSlice maps a Ride entity slice to Ride view model slice
func (mapping *rideMapping) ToRideModelSlice(list []entity.Ride) (retVal []viewmodel.Ride) {
retVal = make([]viewmodel.Ride, 0)
for _, item := range list {
retVal = append(retVal, mapping.ToRideModel(item))
}
return retVal
}