mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-12 13:46:51 +00:00
migration script
This commit is contained in:
parent
9bcd8e611f
commit
0ccabe71b3
3 changed files with 142 additions and 2 deletions
|
|
@ -1,11 +1,43 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
type Host struct {
|
type Host struct {
|
||||||
|
PaymentMethods []string
|
||||||
|
Platforms []string
|
||||||
|
Items []HostItem
|
||||||
CustomerSeed int
|
CustomerSeed int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HostItem struct {
|
||||||
|
Name string
|
||||||
|
Price float64
|
||||||
|
}
|
||||||
|
|
||||||
func NewHost() *Host {
|
func NewHost() *Host {
|
||||||
return &Host{
|
return &Host{
|
||||||
CustomerSeed: 286,
|
CustomerSeed: 286,
|
||||||
|
PaymentMethods: []string{"Card", "Cash", "Cheque", "Transfer"},
|
||||||
|
Platforms: []string{"Booking", "AirBnb", "TripAdvisor", "Other"},
|
||||||
|
Items: []HostItem{
|
||||||
|
{
|
||||||
|
Name: "T2",
|
||||||
|
Price: 59.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "T3",
|
||||||
|
Price: 80.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Airport",
|
||||||
|
Price: 25.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Port",
|
||||||
|
Price: 20.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Taxes",
|
||||||
|
Price: 1.5,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
main.go
7
main.go
|
|
@ -34,5 +34,12 @@ func main() {
|
||||||
log.Fatalf("error migrating the database %s\n", err)
|
log.Fatalf("error migrating the database %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if os.Getenv("MIGRATE_DB") != "" {
|
||||||
|
err := MigrateDB(db)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
server.New(booking.NewService(db), pdf.NewPdfService(), config.NewHost()).Start()
|
server.New(booking.NewService(db), pdf.NewPdfService(), config.NewHost()).Start()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
101
migrateDB.go
Normal file
101
migrateDB.go
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/rjNemo/rentease/config"
|
||||||
|
"github.com/rjNemo/rentease/internal/booking"
|
||||||
|
u "github.com/rjNemo/underscore"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Invoice struct {
|
||||||
|
To time.Time
|
||||||
|
From time.Time
|
||||||
|
Platform string
|
||||||
|
Name string
|
||||||
|
PhoneNumber string `gorm:"column:phoneNumber"`
|
||||||
|
Room string
|
||||||
|
PaymentMethod string `gorm:"column:paymentMethod"`
|
||||||
|
Status string
|
||||||
|
Id int
|
||||||
|
Price float64 `gorm:"type:decimal(10,2)"`
|
||||||
|
PlatformFees float64 `gorm:"type:decimal(10,2);column:platformFees"`
|
||||||
|
CustomerNumber int `gorm:"column:customersNumber"`
|
||||||
|
WithTaxes bool `gorm:"column:withTaxes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (Invoice) TableName() string {
|
||||||
|
return "Invoice"
|
||||||
|
}
|
||||||
|
|
||||||
|
var hc *config.Host = config.NewHost()
|
||||||
|
|
||||||
|
func MigrateDB(db *gorm.DB) error {
|
||||||
|
return db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
invoices := make([]Invoice, 0)
|
||||||
|
if err := tx.Find(&invoices).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// log.Println(invoices)
|
||||||
|
// - for each row in Invoice table,
|
||||||
|
for _, i := range invoices {
|
||||||
|
// create a booking strcut based on the invoice value, commit
|
||||||
|
fmt.Println(" ")
|
||||||
|
b := &booking.Booking{
|
||||||
|
From: i.From,
|
||||||
|
To: i.To,
|
||||||
|
PhoneNumber: i.PhoneNumber,
|
||||||
|
CustomerNumber: i.CustomerNumber,
|
||||||
|
Platform: i.Platform,
|
||||||
|
PlatformFees: i.PlatformFees,
|
||||||
|
Name: i.Name,
|
||||||
|
}
|
||||||
|
if err := tx.Create(b).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Printf("%+v\n", b)
|
||||||
|
// take the new booking id and create a item struct based on the Invoice value, commit
|
||||||
|
item := &booking.Item{
|
||||||
|
BookingId: b.Id,
|
||||||
|
Item: i.Room,
|
||||||
|
Quantity: computeQty(i),
|
||||||
|
Price: priceFromConfig(i, hc),
|
||||||
|
PaymentMethod: i.PaymentMethod,
|
||||||
|
PaymentStatus: i.Status,
|
||||||
|
}
|
||||||
|
if err := tx.Create(item).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Printf("%+v\n", item)
|
||||||
|
if i.WithTaxes {
|
||||||
|
taxItem := &booking.Item{
|
||||||
|
BookingId: b.Id,
|
||||||
|
Item: "Taxes",
|
||||||
|
Quantity: computeQty(i) * i.CustomerNumber,
|
||||||
|
Price: 1.5,
|
||||||
|
PaymentMethod: i.PaymentMethod,
|
||||||
|
PaymentStatus: i.Status,
|
||||||
|
}
|
||||||
|
if err := tx.Create(taxItem).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Printf("%+v\n", taxItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func priceFromConfig(i Invoice, hc *config.Host) float64 {
|
||||||
|
itm, _ := u.Find(hc.Items, func(hi config.HostItem) bool {
|
||||||
|
return hi.Name == i.Room
|
||||||
|
})
|
||||||
|
return itm.Price
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeQty(i Invoice) int {
|
||||||
|
return int(i.To.Sub(i.From) / 86400000000000)
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue