Skip to content

Commit

Permalink
connection with vercel
Browse files Browse the repository at this point in the history
  • Loading branch information
SspencerD committed Oct 5, 2024
1 parent 23a0e96 commit e81b100
Show file tree
Hide file tree
Showing 14 changed files with 1,279 additions and 53 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ node_modules
/.cache
/build
.env
package-lock.json
yarn.lock
pnpm-lock.yaml
Empty file removed app/data/liveness.db
Empty file.
15 changes: 9 additions & 6 deletions app/db/config.server.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';
import * as schema from './schema'; // Aquí irán tus modelos definidos
import { drizzle } from 'drizzle-orm/vercel-postgres';
import {sql} from '@vercel/postgres'
import * as schema from './schema';
import {config} from 'dotenv';

// Conexión a la base de datos SQLite
const sqlite = new Database('data/liveness.db'); // Asegúrate de que esta ruta sea correcta
export const db = drizzle(sqlite, { schema });
config({
path:'.env'
});

export const db = drizzle(sql, { schema });
69 changes: 59 additions & 10 deletions app/db/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { db } from "./config.server";
import { liveness, users } from "./schema";
import { liveness, liveness_results, users } from "./schema";
import { v4 as uuid } from 'uuid';
import { User } from "../types/settings";
import { Liveness, LivenessResult, User } from "../types/settings";
import {sql,eq} from 'drizzle-orm'



//Obtener usuarios
//GET
export const getAllUsers = () => {
db.select().from(users).all();
db.select().from(users)
return {
status: 'OK',
status_code: 200,
Expand All @@ -17,7 +17,7 @@ export const getAllUsers = () => {
};

export const getUserWithLiveness = (userId: string) => {
const userWithLiveness = db.select().from(users).leftJoin(liveness, eq(liveness.id_user , users.id)).where(sql`${users.id} = ${userId}`).all();
const userWithLiveness = db.select().from(users).leftJoin(liveness, eq(liveness.id_user , users.id)).where(sql`${users.id} = ${userId}`);

return {
status: 'OK',
Expand All @@ -26,6 +26,25 @@ export const getUserWithLiveness = (userId: string) => {
}
}

export const getUserById = async (id:string) => {
const user = await db.select().from(users).where(sql`${users.id} = ${id}`);
return {
status: 'OK',
status_code: 200,
data: JSON.stringify(user),
};
};

export const getLivenessById = async (id:string) => {
const liveness = await db.select().from(liveness_results).where(sql`${liveness_results.id} = ${id}`);
return {
status: 'OK',
status_code: 200,
data: JSON.stringify(liveness),
};
};

//POST
export const addNewUser = async (data:User) => {
const newUser = {
id: uuid(),
Expand All @@ -40,6 +59,7 @@ export const addNewUser = async (data:User) => {
country: data.country,
email: data.email,
password: data.password,
serial_number: data.serial_number,
};
await db.insert(users).values(newUser);

Expand All @@ -51,11 +71,40 @@ export const addNewUser = async (data:User) => {
};
};

export const getUserById = async (id:string) => {
const user = await db.select().from(users).where(sql`${users.id} = ${id}`).all();
export const addNewLiveness = async (data:Liveness) => {
const newLiveness = {
id: uuid(),
id_user: data.id_user,
start_date: data.start_date,
end_date: data.end_date,
result: data.result,
ip_address: data.ip_address,
token_session: data.token_session,
device_info: data.device_info,
};
await db.insert(liveness).values(newLiveness);
return {
status: 'OK',
status_code: 200,
data: JSON.stringify(user),
status_code: 201,
message: 'Liveness created correctly',
data: JSON.stringify(newLiveness),
};
};
};

export const addNewLivenessResult = async (data:LivenessResult) => {
const newLivenessResult = {
id: uuid(),
id_liveness: data.id_liveness,
action_type: data.action_type,
action_result: data.action_result,
};
await db.insert(liveness_results).values(newLivenessResult);
return {
status: 'OK',
status_code: 201,
message: 'Liveness result created correctly',
data: JSON.stringify(newLivenessResult),
};
};


91 changes: 61 additions & 30 deletions app/db/schema.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,66 @@
// db/schema.ts
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import {sql} from 'drizzle-orm';
import {
pgTable,
text,
boolean,
timestamp ,
uniqueIndex,
} from "drizzle-orm/pg-core";

export const users = sqliteTable('users', {
id: text('id').primaryKey(),
document_number: text('document_number').notNull(),
name: text('name').notNull(),
lastName: text('lastName').notNull(),
surName: text('surName').notNull(),
birthDate: integer('birthDate' , {mode:'timestamp'}).notNull(),
gender: text('gender').notNull(),
phone: text('phone').notNull(),
register_date: integer("register_date",{mode:'timestamp_ms'}).default(sql`datetime('now')`).notNull(),
country: text('country').notNull(),
email: text('email').notNull(),
password: text('password').notNull(),
});
export const users = pgTable(
"users",
{
id: text("id").primaryKey(),
document_number: text("document_number").notNull(),
name: text("name").notNull(),
lastName: text("lastName").notNull(),
surName: text("surName").notNull(),
birthDate: timestamp("birthDate" ,{withTimezone: true}).notNull(),
gender: text("gender").notNull(),
phone: text("phone").notNull(),
serial_number: text("serial_number").notNull(),
register_date: timestamp("register_date").defaultNow().notNull(),
country: text("country").notNull(),
email: text("email").notNull(),
password: text("password").notNull(),
},
(users) => {
return {
uniqueIdx: uniqueIndex("unique_idx").on(
users.document_number,
users.email,
users.serial_number
),
};
}
);

export const liveness = sqliteTable('liveness', {
id: text('id').primaryKey(),
id_user: text('id_user').notNull().references(() => users.id),
start_date: integer('start_date',{mode:'timestamp_ms'}).notNull(),
end_date: integer('end_date',{mode:'timestamp_ms'}).notNull(),
result: integer('result',{mode:'boolean'}).notNull(),
ip_address: text('ip_address').notNull(),
device_info: text('device_info').notNull(),
});
export const liveness = pgTable(
"liveness",
{
id: text("id").primaryKey(),
id_user: text("id_user")
.notNull()
.references(() => users.id),
initialDate: timestamp("initialDate", {withTimezone: true}).notNull(),
finishDate: timestamp("finishDate", {withTimezone: true}).notNull(),
result: boolean("result").notNull(),
ip_address: text("ip_address").notNull(),
token_session: text("token_session").notNull(),
device_info: text("device_info").notNull(),
},
(liveness) => {
return {
uniqueToken: uniqueIndex("unique_token").on(liveness.token_session),
};
}
);

export const liveness_results = sqliteTable('liveness_results', {
id: text('id').primaryKey(),
id_liveness: text('id_liveness').notNull().references(() => liveness.id),
action_type: text('action_type').notNull(),
action_result: integer('action_result',{mode:'boolean'}).notNull(),
export const liveness_results = pgTable("liveness_results", {
id: text("id").primaryKey(),
id_liveness: text("id_liveness")
.notNull()
.references(() => liveness.id),
action_type: text("action_type").notNull(),
action_result: boolean("action_result").notNull(),
});
19 changes: 19 additions & 0 deletions app/types/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,23 @@ export type User = {
country: string;
email: string;
password: string;
serial_number: string;
};

export type Liveness = {
id?: string;
id_user: string;
start_date: Date;
end_date: Date;
result: boolean;
ip_address: string;
token_session: string;
device_info: string;
};

export type LivenessResult = {
id?: string;
id_liveness: string;
action_type: string;
action_result: boolean;
};
17 changes: 10 additions & 7 deletions drizzle.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { defineConfig } from "drizzle-kit";
import { config } from 'dotenv';
import { defineConfig } from 'drizzle-kit';

config({ path: '.env.local' });

export default defineConfig({
schema:'./app/db/schema.ts',
output: './app/db/migrations',
dialect: 'sqlite',
dbCredentials:{
}
schema: './app/db/schema.ts',
out: './migrations',
dialect: 'postgresql',
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
});
4 changes: 4 additions & 0 deletions migrations/0002_flawless_kinsey_walden.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SET timezone = 'America/Santiago';
ALTER TABLE "liveness" ALTER COLUMN "initialDate" SET DATA TYPE timestamp with time zone;--> statement-breakpoint
ALTER TABLE "liveness" ALTER COLUMN "finishDate" SET DATA TYPE timestamp with time zone;--> statement-breakpoint
ALTER TABLE "users" ALTER COLUMN "birthDate" SET DATA TYPE timestamp with time zone;
1 change: 1 addition & 0 deletions migrations/0003_aspiring_energizer.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE "liveness" ALTER COLUMN "finishDate" DROP DEFAULT;
Loading

0 comments on commit e81b100

Please sign in to comment.