Merge branch 'feature/auth'

This commit is contained in:
2025-12-03 16:21:15 +07:00
4 changed files with 41 additions and 28 deletions
+5 -7
View File
@@ -18,13 +18,11 @@ BEGIN
DO UPDATE SET last_value = weekly_id_counters.last_value + 1 DO UPDATE SET last_value = weekly_id_counters.last_value + 1
RETURNING last_value INTO v_seq; RETURNING last_value INTO v_seq;
RETURN format( RETURN
'%s-%02s%02s%04s', p_prefix || '-' ||
p_prefix, to_char((v_yy % 100), 'FM00') ||
v_yy % 100, to_char(v_ww, 'FM00') ||
v_ww, to_char(v_seq, 'FM0000');
v_seq
);
END; END;
$$; $$;
--> statement-breakpoint --> statement-breakpoint
+2 -2
View File
@@ -6,7 +6,7 @@ import merchantNonces from '~/db/schema/merchant_nonces'
import { verify } from '~/helpers/signature' import { verify } from '~/helpers/signature'
import { UnauthenticatedError } from '~/helpers/errors' import { UnauthenticatedError } from '~/helpers/errors'
export const apiKey = new Elysia().macro({ export const apiKeyAuth = new Elysia().macro({
verifyKey: { verifyKey: {
headers: t.Object({ headers: t.Object({
'x-api-key': t.String(), 'x-api-key': t.String(),
@@ -14,7 +14,7 @@ export const apiKey = new Elysia().macro({
'x-signature': t.String(), 'x-signature': t.String(),
'x-timestamp': t.Number(), 'x-timestamp': t.Number(),
}), }),
body: t.Unknown(),
async beforeHandle({ headers, body }) { async beforeHandle({ headers, body }) {
const apiKey = headers['x-api-key'] const apiKey = headers['x-api-key']
const nonce = headers['x-nonce'] const nonce = headers['x-nonce']
+24 -19
View File
@@ -15,26 +15,31 @@ export async function createMerchant(body: CreateMerchantBody) {
const apiKey = generateApiKey() const apiKey = generateApiKey()
const secretKey = generateSecretKey() const secretKey = generateSecretKey()
// Insert new merchant try {
const result = await db // Insert new merchant
.insert(table.merchants) const result = await db
.values({ .insert(table.merchants)
merchantName: body.merchantName, .values({
contactEmail: body.contactEmail, merchantName: body.merchantName,
contactPhone: body.contactPhone, contactEmail: body.contactEmail,
apiKey, contactPhone: body.contactPhone,
secretKey, apiKey,
}) secretKey,
.returning({ })
merchantId: table.merchants.merchantId, .returning({
apiKey: table.merchants.apiKey, merchantId: table.merchants.merchantId,
secretKey: table.merchants.secretKey, apiKey: table.merchants.apiKey,
createdAt: table.merchants.createdAt, secretKey: table.merchants.secretKey,
}) createdAt: table.merchants.createdAt,
})
if (result.length === 0) { if (result.length === 0) {
throw new Error('Failed to create merchant')
}
return result[0]
} catch (error) {
console.error('Error creating merchant:', error)
throw new Error('Failed to create merchant') throw new Error('Failed to create merchant')
} }
return result[0]
} }
+10
View File
@@ -3,6 +3,7 @@ import { createMerchantBody, createMerchantResponseSchema } from './schema'
import CreateMerchantService from './commands/service' import CreateMerchantService from './commands/service'
import { basicAuthMiddleware } from '~/middlewares/basicAuth' import { basicAuthMiddleware } from '~/middlewares/basicAuth'
import { DataAlreadyExistsError } from '~/helpers/errors' import { DataAlreadyExistsError } from '~/helpers/errors'
import { apiKeyAuth } from '~/middlewares/apiKeyAuth'
export const router = new Elysia({ export const router = new Elysia({
name: 'modules.auth', name: 'modules.auth',
@@ -40,5 +41,14 @@ export const router = new Elysia({
security: [{ basicAuth: [] }], security: [{ basicAuth: [] }],
}, },
}) })
.use(apiKeyAuth)
.get('/test-key', async ({ body }) => {
return body
}, {
verifyKey: true,
detail: {
security: [{ basicAuth: [] }],
},
})
export default router export default router