dh_demo

DreamHanks demo project
git clone git://git.lair.cx/dh_demo
Log | Files | Refs | README

signup_request.ts (1742B)


      1 import db from '@/lib/db'
      2 import { modelBehaviour } from '@/lib/model_helpers'
      3 import { OkPacket, RowDataPacket } from 'mysql2'
      4 
      5 export interface SignupRequest {
      6   id: number
      7   email: string
      8   requestedIp: string
      9   requestedUserAgent: string
     10   createdAt: Date
     11   confirmedAt: Date | null
     12 }
     13 
     14 const SQL_CREATE_SIGNUP_REQUEST = `
     15     INSERT INTO signup_requests (email, requested_ip, requested_user_agent)
     16     VALUES (?, ?, ?)
     17 `
     18 
     19 export const createSignupRequest = modelBehaviour<
     20   [ email: string, requestedIP: string, requestedUserAgent: string ],
     21   number
     22 >(async (conn, args) => {
     23   const [result] = await conn.query<OkPacket>({
     24     sql: SQL_CREATE_SIGNUP_REQUEST,
     25   }, args)
     26 
     27   return result.insertId
     28 })
     29 
     30 const SQL_GET_UNCONFIRMED_SIGNUP_REQUEST = `
     31     SELECT id, email, requested_ip, requested_user_agent, created_at, confirmed_at
     32     FROM signup_requests
     33     WHERE id = ?
     34       AND created_at < DATE_ADD(NOW(), INTERVAL 5 HOUR)
     35       AND confirmed_at IS NULL
     36     LIMIT 1
     37 `
     38 
     39 export const getUnconfirmedSignupRequest = modelBehaviour<
     40   [ id: number ],
     41   SignupRequest | null
     42 >(async (conn, args) => {
     43   const [rows] = await conn.query<RowDataPacket[]>({
     44     sql: SQL_GET_UNCONFIRMED_SIGNUP_REQUEST,
     45   }, args)
     46 
     47   if (rows.length === 0) {
     48     return null
     49   }
     50 
     51   const row = rows[0]
     52   return {
     53     id: row[0],
     54     email: row[1],
     55     requestedIp: row[2],
     56     requestedUserAgent: row[3],
     57     createdAt: row[4],
     58     confirmedAt: row[5],
     59   }
     60 })
     61 
     62 const SQL_CONFIRM_SIGNUP_REQUEST = `
     63     UPDATE signup_requests
     64     SET confirmed_at = NOW()
     65     WHERE id = ?
     66 `
     67 
     68 export const confirmSignupRequest = modelBehaviour<
     69   [ id: number ],
     70   void
     71 >(async (conn, args) => {
     72   await conn.query<OkPacket>({
     73     sql: SQL_CONFIRM_SIGNUP_REQUEST,
     74   }, args)
     75 })