remove cart

This commit is contained in:
sfja 2025-03-13 23:59:45 +01:00
parent e39bd68975
commit 739db39142
11 changed files with 37 additions and 105 deletions

View File

@ -32,21 +32,14 @@ CREATE TABLE IF NOT EXISTS product_prices (
FOREIGN KEY(product) REFERENCES products(id)
);
CREATE TABLE IF NOT EXISTS carts (
id INTEGER PRIMARY KEY,
user INTEGER NOT NULL,
FOREIGN KEY(user) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS cart_items (
id INTEGER PRIMARY KEY,
cart INTEGER NOT NULL,
user INTEGER NOT NULL,
product INTEGER NOT NULL,
amount INTEGER NOT NULL,
FOREIGN KEY(cart) REFERENCES carts(id),
FOREIGN KEY(user) REFERENCES users(id),
FOREIGN KEY(product) REFERENCES product(id)
);

View File

@ -68,7 +68,7 @@ const Session* middleware_session(HttpCtx* ctx);
#define RESPOND_SERVER_ERROR(HTTP_CTX) \
RESPOND_JSON(HTTP_CTX, 500, "{\"ok\":false,\"msg\":\"server error\"}")
__attribute__((unused)) static inline void ___include_user(void)
__attribute__((unused)) static inline void ___controllers_include_user(void)
{
RESPOND((HttpCtx*)0, 200, "text/html", "")
}

View File

@ -30,4 +30,5 @@ DbRes db_user_with_email(Db* db, User* user, const char* email);
/// Expects `vec` to be constructed.
DbRes db_product_all(Db* db, ProductVec* vec);
DbRes db_cart_items_with_user_id(Db* db, CartItemVec* vec, int64_t user_id);
__attribute__((deprecated("store in memory instead"))) DbRes
db_cart_items_with_user_id(Db* db, CartItemVec* vec, int64_t user_id);

View File

@ -282,7 +282,6 @@ l0_return:
DbRes db_cart_items_with_user_id(Db* db, CartItemVec* vec, int64_t user_id)
{
static_assert(sizeof(Cart) == 16, "model has changed");
static_assert(sizeof(CartItem) == 32, "model has changed");
sqlite3* connection;
@ -290,45 +289,19 @@ DbRes db_cart_items_with_user_id(Db* db, CartItemVec* vec, int64_t user_id)
DbRes res;
sqlite3_stmt* stmt;
int sqlite_res = sqlite3_prepare_v2(connection,
"SELECT id "
" FROM carts WHERE user = ?",
-1,
&stmt,
NULL);
if (sqlite_res != SQLITE_OK) {
fprintf(stderr,
"error: %s\n at %s:%d\n",
sqlite3_errmsg(connection),
__func__,
__LINE__);
res = DbRes_Error;
goto l0_return;
}
sqlite3_bind_int64(stmt, 1, user_id);
int step_res = sqlite3_step(stmt);
if (step_res == SQLITE_DONE) {
res = DbRes_NotFound;
goto l0_return;
} else if (step_res != SQLITE_ROW) {
fprintf(stderr, "error: %s\n", sqlite3_errmsg(connection));
res = DbRes_Error;
goto l0_return;
}
int64_t cart_id = GET_INT(0);
int sqlite_res;
sqlite_res = sqlite3_prepare_v2(connection,
"SELECT id, cart, product, amount FROM cart_items WHERE cart = ?",
"SELECT id, user, product, amount FROM cart_items WHERE user = ?",
-1,
&stmt,
NULL);
sqlite3_bind_int64(stmt, 1, cart_id);
sqlite3_bind_int64(stmt, 1, user_id);
while ((sqlite_res = sqlite3_step(stmt)) == SQLITE_ROW) {
CartItem cart_item = {
.id = GET_INT(0),
.cart_id = GET_INT(1),
.user_id = GET_INT(1),
.product_id = GET_INT(2),
.amount = GET_INT(3),
};

View File

@ -1,3 +1,4 @@
#include "collections/kv_map.h"
#include "controllers/controllers.h"
#include "db/db_sqlite.h"
#include "http/http.h"
@ -61,9 +62,13 @@ int main(void)
db_sqlite_free(db);
}
#ifdef RUN_TESTS
void test(void)
{
str_util_test();
printf("ALL TESTS PASSED 💅\n");
test_util_str();
test_collections_kv_map();
printf("\n\x1b[1;97m ALL TESTS \x1b[1;92mPASSED"
" \x1b[1;97mSUCCESSFULLY 💅\x1b[0m\n\n");
exit(0);
}
#endif

View File

@ -38,13 +38,6 @@ void product_price_destroy(ProductPrice* m)
(void)m;
}
void cart_destroy(Cart* m)
{
static_assert(sizeof(Cart) == 16, "model has changed");
(void)m;
}
void cart_item_destroy(CartItem* m)
{
static_assert(sizeof(CartItem) == 32, "model has changed");
@ -163,25 +156,6 @@ char* product_price_to_json_string(const ProductPrice* m)
return result;
}
char* cart_to_json_string(const Cart* m)
{
static_assert(sizeof(Cart) == 16, "model has changed");
String string;
string_construct(&string);
string_pushf(&string,
"{"
"\"id\":%ld,"
"\"user_id\":%ld"
"}",
m->id,
m->user_id);
char* result = string_copy(&string);
string_destroy(&string);
return result;
}
char* cart_item_to_json_string(const CartItem* m)
{
static_assert(sizeof(CartItem) == 32, "model has changed");
@ -191,12 +165,12 @@ char* cart_item_to_json_string(const CartItem* m)
string_pushf(&string,
"{"
"\"id\":%ld,"
"\"cart_id\":%ld,"
"\"user_id\":%ld,"
"\"product_id\":%ld,"
"\"amount\":%ld"
"}",
m->id,
m->cart_id,
m->user_id,
m->product_id,
m->amount);
@ -356,30 +330,13 @@ int product_price_from_json(ProductPrice* m, const JsonValue* json)
return 0;
}
int cart_from_json(Cart* m, const JsonValue* json)
{
static_assert(sizeof(Cart) == 16, "model has changed");
ObjField fields[] = {
{ "id", JsonType_Number },
{ "user_id", JsonType_Number },
};
if (!obj_conforms(json, fields, sizeof(fields) / sizeof(fields[0])))
return -1;
*m = (Cart) {
.id = GET_INT("id"),
.user_id = GET_INT("user_id"),
};
return 0;
}
int cart_item_from_json(CartItem* m, const JsonValue* json)
{
static_assert(sizeof(CartItem) == 32, "model has changed");
ObjField fields[] = {
{ "id", JsonType_Number },
{ "cart_id", JsonType_Number },
{ "user_id", JsonType_Number },
{ "product_id", JsonType_Number },
{ "amount", JsonType_Number },
};
@ -387,7 +344,7 @@ int cart_item_from_json(CartItem* m, const JsonValue* json)
return -1;
*m = (CartItem) {
.id = GET_INT("id"),
.cart_id = GET_INT("cart_id"),
.user_id = GET_INT("user_id"),
.product_id = GET_INT("product_id"),
.amount = GET_INT("amount"),
};

View File

@ -34,11 +34,6 @@ typedef struct {
typedef struct {
int64_t id;
int64_t user_id;
} Cart;
typedef struct {
int64_t id;
int64_t cart_id;
int64_t product_id;
int64_t amount;
} CartItem;
@ -47,7 +42,6 @@ void user_destroy(User* model);
void coord_destroy(Coord* model);
void product_destroy(Product* model);
void product_price_destroy(ProductPrice* model);
void cart_destroy(Cart* model);
void cart_item_destroy(CartItem* model);
//

View File

@ -9,7 +9,6 @@ DEFINE_MODEL_JSON(User, user)
DEFINE_MODEL_JSON(Coord, coord)
DEFINE_MODEL_JSON(Product, product)
DEFINE_MODEL_JSON(ProductPrice, product_price)
DEFINE_MODEL_JSON(Cart, cart)
DEFINE_MODEL_JSON(CartItem, cart_item)
DEFINE_MODEL_JSON(UsersRegisterReq, users_register_req)

View File

@ -4,12 +4,18 @@
#include <stdlib.h>
#define PANIC(...) \
(fputs("\x1b[1;31mpanic\x1b[97m: ", stderr), fprintf(stderr, __VA_ARGS__), \
fprintf(stderr, "\x1b[0m\n\tin %s:%d\n\tat %s:%d\n", __func__, \
__LINE__, __FILE__, __LINE__), \
exit(1), (void)0)
(fputs("\x1b[1;31mpanic\x1b[97m: ", stderr), \
fprintf(stderr, __VA_ARGS__), \
fprintf(stderr, \
"\x1b[0m\n\tin %s:%d\n\tat %s:%d\n", \
__func__, \
__LINE__, \
__FILE__, \
__LINE__), \
exit(1), \
(void)0)
__attribute__((unused)) static inline void ___include_user(void)
__attribute__((unused)) static inline void ___panic_h_include_user(void)
{
PANIC("");
}

View File

@ -260,7 +260,8 @@ char* str_random(size_t length)
return string;
}
void str_util_test(void)
#ifdef RUN_TESTS
void test_util_str(void)
{
{
char* hash = str_hash("1234");
@ -282,3 +283,4 @@ void str_util_test(void)
free(token_2);
}
}
#endif

View File

@ -42,4 +42,6 @@ uint64_t str_fast_hash(const char* input);
char* str_random(size_t length);
void str_util_test(void);
#ifdef RUN_TESTS
void test_util_str(void);
#endif