014
This commit is contained in:
47
src/booking_controller.v
Normal file
47
src/booking_controller.v
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import veb
|
||||||
|
import time
|
||||||
|
|
||||||
|
@['/controller/booking/create'; post]
|
||||||
|
pub fn (mut app App) controller_create_booking(mut ctx Context, to string, from string, name string, price int, status string, departure string) veb.Result {
|
||||||
|
fields := {
|
||||||
|
'to': to
|
||||||
|
'from': from
|
||||||
|
'name': name
|
||||||
|
'price': price.str()
|
||||||
|
'status': status
|
||||||
|
'departure': departure
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for empty fields
|
||||||
|
mut empty_fields := []string{}
|
||||||
|
for field_name, value in fields {
|
||||||
|
if value == '' {
|
||||||
|
empty_fields << field_name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
user_token := ctx.get_cookie('token') or { '' }
|
||||||
|
token := app.auth.find_token(user_token) or { return ctx.text('User not logged in') }
|
||||||
|
|
||||||
|
if token.user_id == 0 {
|
||||||
|
return ctx.text('User not logged in')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse with specific format
|
||||||
|
departure_time := time.parse_format(departure, 'YYYY-MM-DD') or {
|
||||||
|
println('Parse error: ${err}')
|
||||||
|
return ctx.text('Invalid departure time format.')
|
||||||
|
}
|
||||||
|
|
||||||
|
flight := app.service_add_flight(from, to, departure_time, price) or {
|
||||||
|
return ctx.text('Flight not added')
|
||||||
|
}
|
||||||
|
|
||||||
|
app.service_add_booking(name, token.user_id, flight.id, status) or {
|
||||||
|
return ctx.text('Booking not added')
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.text('Booking created')
|
||||||
|
}
|
@@ -6,6 +6,7 @@ import time
|
|||||||
pub struct Booking {
|
pub struct Booking {
|
||||||
mut:
|
mut:
|
||||||
id int @[primary; sql: serial]
|
id int @[primary; sql: serial]
|
||||||
|
name string
|
||||||
user_id int
|
user_id int
|
||||||
flight_id int
|
flight_id int
|
||||||
status string @[sql_type: 'TEXT']
|
status string @[sql_type: 'TEXT']
|
||||||
|
17
src/booking_service.v
Normal file
17
src/booking_service.v
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
fn (app &App) service_add_booking(name string, user_id int, flight_id int, status string) ! {
|
||||||
|
booking := Booking{
|
||||||
|
name: name
|
||||||
|
user_id: user_id
|
||||||
|
flight_id: flight_id
|
||||||
|
status: status
|
||||||
|
created_at: time.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
sql app.db {
|
||||||
|
insert booking into Booking
|
||||||
|
}!
|
||||||
|
}
|
@@ -8,9 +8,8 @@ mut:
|
|||||||
id int @[primary; sql: serial]
|
id int @[primary; sql: serial]
|
||||||
from string @[sql_type: 'TEXT']
|
from string @[sql_type: 'TEXT']
|
||||||
to string @[sql_type: 'TEXT']
|
to string @[sql_type: 'TEXT']
|
||||||
date string @[sql_type: 'TEXT']
|
departure time.Time @[sql_type: 'DATETIME'] // Changed from string to time.Time
|
||||||
price int @[sql_type: 'INT']
|
price int @[sql_type: 'INT']
|
||||||
status string @[sql_type: 'TEXT']
|
|
||||||
bookings []Booking @[fkey: 'flight_id']
|
bookings []Booking @[fkey: 'flight_id']
|
||||||
created_at time.Time
|
created_at time.Time
|
||||||
}
|
}
|
||||||
|
25
src/flight_service.v
Normal file
25
src/flight_service.v
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
fn (app &App) service_add_flight(from string, to string, departure time.Time, price int) !Flight {
|
||||||
|
flight_model := Flight{
|
||||||
|
from: from
|
||||||
|
to: to
|
||||||
|
departure: departure
|
||||||
|
price: price
|
||||||
|
created_at: time.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
sql app.db {
|
||||||
|
insert flight_model into Flight
|
||||||
|
}!
|
||||||
|
|
||||||
|
flight := sql app.db {
|
||||||
|
select from Flight where from == flight_model.from && to == flight_model.to
|
||||||
|
&& departure == flight_model.departure && price == flight_model.price
|
||||||
|
&& created_at == flight_model.created_at
|
||||||
|
}!
|
||||||
|
|
||||||
|
return flight[0]
|
||||||
|
}
|
@@ -29,8 +29,8 @@ fn main() {
|
|||||||
|
|
||||||
sql app.db {
|
sql app.db {
|
||||||
create table User
|
create table User
|
||||||
create table Plane
|
create table Flight
|
||||||
create table Ticket
|
create table Booking
|
||||||
} or { panic('error on create table: ${err}') }
|
} or { panic('error on create table: ${err}') }
|
||||||
|
|
||||||
app.auth = auth.new(app.db)
|
app.auth = auth.new(app.db)
|
||||||
|
@@ -3,12 +3,12 @@ module main
|
|||||||
@[table: 'users']
|
@[table: 'users']
|
||||||
pub struct User {
|
pub struct User {
|
||||||
mut:
|
mut:
|
||||||
id int @[primary; sql: serial]
|
id int @[primary; sql: serial]
|
||||||
first_name string @[sql_type: 'TEXT']
|
first_name string @[sql_type: 'TEXT']
|
||||||
last_name string @[sql_type: 'TEXT']
|
last_name string @[sql_type: 'TEXT']
|
||||||
email string @[sql_type: 'TEXT'; unique]
|
email string @[sql_type: 'TEXT'; unique]
|
||||||
password string @[sql_type: 'TEXT']
|
password string @[sql_type: 'TEXT']
|
||||||
gender string @[sql_type: 'TEXT']
|
gender string @[sql_type: 'TEXT']
|
||||||
tickets []Ticket @[fkey: 'user_id']
|
bookings []Booking @[fkey: 'user_id']
|
||||||
salt string
|
salt string
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user