11import { DB , SCHEMA } from "@/db" ;
22import { createTRPCRouter , publicProcedure } from "@/trpc" ;
3- import { and , eq , ilike } from "drizzle-orm" ;
3+ import { and , eq , ilike , sql } from "drizzle-orm" ;
44import { z } from "zod" ;
55
6+ const GROUPS = SCHEMA . TG . groups ;
67export default createTRPCRouter ( {
78 getAll : publicProcedure . query ( async ( ) => {
8- const results = await DB . select ( ) . from ( SCHEMA . TG . groups ) ;
9+ const results = await DB . select ( ) . from ( GROUPS ) ;
910 return results ;
1011 } ) ,
1112
@@ -17,7 +18,7 @@ export default createTRPCRouter({
1718 )
1819 . query ( async ( { input } ) => {
1920 return await DB . select ( )
20- . from ( SCHEMA . TG . groups )
21+ . from ( GROUPS )
2122 . where ( ( t ) =>
2223 and ( ...input . query . split ( " " ) . map ( ( q ) => ilike ( t . title , `%${ q } %` ) ) ) ,
2324 ) ;
@@ -31,7 +32,7 @@ export default createTRPCRouter({
3132 )
3233 . query ( async ( { input } ) => {
3334 return await DB . select ( )
34- . from ( SCHEMA . TG . groups )
35+ . from ( GROUPS )
3536 . limit ( 1 )
3637 . where ( ( t ) => eq ( t . telegramId , input . telegramId ) ) ;
3738 } ) ,
@@ -46,11 +47,32 @@ export default createTRPCRouter({
4647 } ) ,
4748 ) ,
4849 )
50+ . output ( z . array ( z . number ( ) ) )
4951 . mutation ( async ( { input } ) => {
50- const rows = await DB . insert ( SCHEMA . TG . groups )
52+ const rows = await DB . insert ( GROUPS )
5153 . values ( input )
52- . onConflictDoNothing ( )
54+ . onConflictDoUpdate ( {
55+ target : GROUPS . telegramId ,
56+ set : {
57+ title : sql . raw ( `excluded.${ GROUPS . title . name } ` ) ,
58+ link : sql . raw ( `excluded.${ GROUPS . link . name } ` ) ,
59+ } ,
60+ } )
5361 . returning ( ) ;
5462 return rows . map ( ( r ) => r . telegramId ) ;
5563 } ) ,
64+
65+ delete : publicProcedure
66+ . input (
67+ z . object ( {
68+ telegramId : z . number ( ) ,
69+ } ) ,
70+ )
71+ . output ( z . boolean ( ) )
72+ . mutation ( async ( { input } ) => {
73+ const rows = await DB . delete ( GROUPS )
74+ . where ( eq ( GROUPS . telegramId , input . telegramId ) )
75+ . returning ( ) ;
76+ return rows . length === 1 ;
77+ } ) ,
5678} ) ;
0 commit comments