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
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
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)
+ }
+}