diff --git a/src/databases/config_databases_sqlite.v b/databases/config_databases_sqlite.v similarity index 100% rename from src/databases/config_databases_sqlite.v rename to databases/config_databases_sqlite.v diff --git a/src/src b/src/src new file mode 100755 index 0000000..b5c8231 Binary files /dev/null and b/src/src differ diff --git a/src/templates/first_name.html b/src/templates/first_name.html new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/index.html b/src/templates/index.html new file mode 100644 index 0000000..7b111ad --- /dev/null +++ b/src/templates/index.html @@ -0,0 +1,253 @@ + + + + + + Flight Booking + + + +
+
+

Flight Booking

+

Find and book your perfect flight

+
+ + + +
+
+
+

New York (JFK) to Los Angeles (LAX)

+

Departure: June 15, 2024 at 08:00 AM

+

Airline: Delta Air Lines

+

Flight Duration: 6h 15m

+
+
+ $345.99 + +
+
+ +
+
+

Chicago (ORD) to San Francisco (SFO)

+

Departure: June 16, 2024 at 11:30 AM

+

Airline: United Airlines

+

Flight Duration: 4h 45m

+
+
+ $289.50 + +
+
+
+
+ + diff --git a/src/templates/signup.html b/src/templates/signup.html new file mode 100644 index 0000000..5a0fe18 --- /dev/null +++ b/src/templates/signup.html @@ -0,0 +1,371 @@ + + + + + + User Registration + + + +
+
+

User Registration

+

Create your account to start booking flights

+
+ +
+
+
+
+ + +
+ Please enter a valid first name +
+
+
+ + +
+ Please enter a valid last name +
+
+
+ +
+ + +
+ Please enter a valid email address +
+
+ +
+ + +
+ Password must be at least 8 characters long +
+
+ +
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + +
+ +
+
+
+
+ + + + diff --git a/src/user_controller.v b/src/user_controller.v new file mode 100644 index 0000000..2118223 --- /dev/null +++ b/src/user_controller.v @@ -0,0 +1,41 @@ +module main + +import veb +import encoding.base64 +import json + +@['/controller/user/create'; post] +pub fn (mut app App) controller_create_user(mut ctx Context) veb.Result { + first_name := ctx.form['first_name'] + last_name := ctx.form['last_name'] + email := ctx.form['email'] + password := ctx.form['password'] + gender := ctx.form['gender'] + + // Create a map of field names and their values + fields := { + 'first_name': first_name + 'last_name': last_name + 'email': email + 'password': password + // Gender can be optional, so not including it in validation + } + + // Check for empty fields + mut empty_fields := []string{} + for field_name, value in fields { + if value == '' { + empty_fields << field_name + } + } + + // If any fields are empty, return error message + if empty_fields.len > 0 { + return ctx.text('The following fields cannot be empty: ${empty_fields.join(", ")}') + } + + app.service_add_user(first_name, last_name, email, password, gender) or { + return ctx.text('error: ${err}') + } + return ctx.text('User created successfully') +} diff --git a/src/user_entities.v b/src/user_entities.v index 2d9795d..e16b737 100644 --- a/src/user_entities.v +++ b/src/user_entities.v @@ -3,8 +3,11 @@ module main @[table: 'users'] pub struct User { mut: - id int @[primary; sql: serial] - username string @[sql_type: 'TEXT'; unique] - password string @[sql_type: 'TEXT'] - tickets []Ticket @[fkey: 'user_id'] + id int @[primary; sql: serial] + first_name string @[sql_type: 'TEXT'] + last_name string @[sql_type: 'TEXT'] + email string @[sql_type: 'TEXT'; unique] + password string @[sql_type: 'TEXT'] + gender string @[sql_type: 'TEXT'] + tickets []Ticket @[fkey: 'user_id'] } diff --git a/src/user_service.v b/src/user_service.v new file mode 100644 index 0000000..f5094b8 --- /dev/null +++ b/src/user_service.v @@ -0,0 +1,33 @@ +module main + +import crypto.bcrypt +import databases + +fn (app &App) service_add_user(first_name string, last_name string, email string, password string, gender string) ! { + mut db := databases.create_db_connection()! + + defer { + db.close() or { panic(err) } + } + + hashed_password := bcrypt.generate_from_password(password.bytes(), bcrypt.min_cost) or { + eprintln(err) + return err + } + + user_model := User{ + first_name: first_name + last_name: last_name + email: email + password: hashed_password + gender: gender + } + + mut insert_error := '' + sql db { + insert user_model into User + } or { insert_error = err.msg() } + if insert_error != '' { + return error(insert_error) + } +}