added db_insert_user

This commit is contained in:
wt
2025-08-22 18:24:04 +07:00
parent 4f67cf11bd
commit 33e8bed178
3 changed files with 77 additions and 11 deletions
+56
View File
@@ -0,0 +1,56 @@
#include "database.h"
#include "sql.h"
#include "user.h"
User *db_insert_user(const char *username, const char *email,
const char *password, const char *group,
bool *is_superuser) {
pthread_mutex_lock(&db_mutex);
if (!db) {
fprintf(stderr, "Databse not initialized\n");
return nullptr;
}
if (!username || !email || !password) {
fprintf(stderr, "username, email, password connot be empty\n");
return nullptr;
}
const char *sql = nullptr;
sqlite3_stmt *stmt;
int rc;
if (!group || !is_superuser) {
sql = INSERT_USER_USERNAME_EMAIL_PASSWORD_SQL;
} else if (!group) {
sql = INSERT_USER_USERNAME_EMAIL_PASSWORD_GROUP_SQL;
} else {
sql = INSERT_USER_FULL_SQL;
}
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot prepare statement: %s\n", sqlite3_errmsg(db));
return nullptr;
}
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, email, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, password, -1, SQLITE_STATIC);
if (group) {
sqlite3_bind_text(stmt, 4, group, -1, SQLITE_STATIC);
}
if (is_superuser) {
sqlite3_bind_int(stmt, 5, is_superuser);
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return nullptr;
}
int inserted_id = sqlite3_last_insert_rowid(db);
sqlite3_finalize(stmt);
printf("User inserted successfully. ID: %d\n", inserted_id);
pthread_mutex_unlock(&db_mutex);
}
+16 -9
View File
@@ -1,13 +1,13 @@
#pragma once
#define CREATE_TABLE_USERS \
"create table if not exists users(" \
"id integer primary key autoincrement," \
"username text unique," \
"email char(50) unique," \
"password char(150) not null," \
"user_group char(50) default 'users'," \
"is_superuser boolean default false" \
#define CREATE_TABLE_USERS \
"create table if not exists users(" \
"id integer primary key autoincrement," \
"username text unique," \
"email char(50) unique," \
"password char(150) not null," \
"user_group char(50) default 'users'," \
"is_superuser boolean default false" \
");"
#define INSERT_USER_SQL \
@@ -16,4 +16,11 @@
#define SELECT_ALL_USERS_SQL "select * from users"
#define SELECT_USER_BY_USERNAME_SQL "select * from users where username = ?"
#define INSERT_USER_USERNAME_EMAIL_PASSWORD_SQL \
"insert into users (username, email, password) values (?, ?, ?)"
#define INSERT_USER_USERNAME_EMAIL_PASSWORD_GROUP_SQL \
"insert into users (username, email, password, user_group) values (?, ?, " \
"?, ?)"
#define INSERT_USER_FULL_SQL \
"insert into users (username, email, password, user_group, is_superuser) " \
"values (?, ?, ?, ?, ?)"
+5 -2
View File
@@ -13,8 +13,8 @@ typedef struct User {
bool is_superuser;
} User;
User *new_user(int id, const char *username, const char *password, const char *email,
const char *group, bool is_superuser);
User *new_user(int id, const char *username, const char *password,
const char *email, const char *group, bool is_superuser);
void free_user(User *user);
@@ -55,3 +55,6 @@ void verify_token(struct mg_connection *c, struct mg_http_message *hm);
void db_get_users_from_file(const char *filename);
char *db_get_all_users();
User *db_get_user_by_username(const char *username);
User *db_insert_user(const char *username, const char *email,
const char *password, const char *group,
bool *is_superuser);