@@ -7,10 +7,10 @@ import { augmentIssueArrayWithInducksData } from "~/services/coa";
7
7
import { getPublicationTitles } from "~/services/coa/publications" ;
8
8
import type { InducksIssueQuotationSimple } from "~dm-types/InducksIssueQuotationSimple" ;
9
9
import type { TransactionResults } from "~dm-types/TransactionResults" ;
10
- import { prismaClient as prismaCoa } from "~prisma-schemas/schemas/coa/client" ;
11
10
import type { issue , user } from "~prisma-schemas/schemas/dm" ;
12
11
import { issue_condition } from "~prisma-schemas/schemas/dm" ;
13
12
import { prismaClient as prismaDm } from "~prisma-schemas/schemas/dm/client" ;
13
+ import { prismaClient as prismaCoa } from "~prisma-schemas/schemas/coa/client" ;
14
14
15
15
import type Events from "../types" ;
16
16
import {
@@ -19,23 +19,65 @@ import {
19
19
handleIsOnSale ,
20
20
} from "./util" ;
21
21
22
- export const getCollectionCountrycodes = ( userId : number ) =>
23
- getCollectionPublicationcodes ( userId ) . then ( ( data ) => [
24
- ...new Set ( data . map ( ( publicationcode ) => publicationcode . split ( "/" ) [ 0 ] ) ) ,
25
- ] ) ;
26
-
27
- export const getCollectionPublicationcodes = ( userId : number ) =>
28
- prismaDm . issue
29
- . findMany ( {
30
- distinct : [ "publicationcode" ] ,
31
- select : {
32
- publicationcode : true ,
22
+ const getCoaCountByPublicationcode = ( collectionPublicationcodes : string [ ] ) =>
23
+ prismaCoa . inducks_issue
24
+ . groupBy ( {
25
+ _count : {
26
+ issuenumber : true ,
33
27
} ,
34
28
where : {
35
- userId,
29
+ publicationcode : {
30
+ in : collectionPublicationcodes ,
31
+ } ,
32
+ } ,
33
+ by : [ "publicationcode" ] ,
34
+ } )
35
+ . then ( ( data ) =>
36
+ Object . fromEntries (
37
+ data . map ( ( { publicationcode, _count } ) => [
38
+ publicationcode ! ,
39
+ _count . issuenumber ,
40
+ ] ) ,
41
+ ) ,
42
+ ) ;
43
+
44
+ const getCoaCountByCountrycode = ( collectionCountrycodes : string [ ] ) =>
45
+ prismaCoa . inducks_issue
46
+ . groupBy ( {
47
+ _count : {
48
+ issuenumber : true ,
49
+ } ,
50
+ where : {
51
+ OR : collectionCountrycodes . map ( ( countrycode ) => ( {
52
+ publicationcode : {
53
+ startsWith : `${ countrycode } /` ,
54
+ } ,
55
+ } ) ) ,
36
56
} ,
57
+ by : [ "publicationcode" ] ,
37
58
} )
38
- . then ( ( data ) => [ ...data . map ( ( { publicationcode } ) => publicationcode ! ) ] ) ;
59
+ . then ( ( data ) =>
60
+ data . reduce < Record < string , number > > (
61
+ ( acc , { publicationcode, _count } ) => {
62
+ const countrycode = publicationcode ! . split ( "/" ) [ 0 ] ;
63
+ acc [ countrycode ] = _count . issuenumber + ( acc [ countrycode ] || 0 ) ;
64
+ return acc ;
65
+ } ,
66
+ { } ,
67
+ ) ,
68
+ ) ;
69
+
70
+ export const getCollectionCountrycodes = ( issues : issue [ ] ) => [
71
+ ...new Set (
72
+ getCollectionPublicationcodes ( issues ) . map (
73
+ ( publicationcode ) => publicationcode . split ( "/" ) [ 0 ] ,
74
+ ) ,
75
+ ) ,
76
+ ] ;
77
+
78
+ export const getCollectionPublicationcodes = ( issues : issue [ ] ) => [
79
+ ...new Set ( issues . map ( ( { publicationcode } ) => publicationcode ! ) ) ,
80
+ ] ;
39
81
40
82
export default ( socket : Socket < Events > ) => {
41
83
socket . on ( "getPublicationTitles" , async ( callback ) =>
@@ -65,6 +107,28 @@ export default (socket: Socket<Events>) => {
65
107
issues as ( issue & { issuecode : string } ) [ ] ,
66
108
) ,
67
109
)
110
+ . then ( async ( issues ) => {
111
+ const collectionPublicationcodes = [
112
+ ...new Set ( issues . map ( ( { publicationcode } ) => publicationcode ! ) ) ,
113
+ ] ;
114
+ const collectionCountrycodes = [
115
+ ...new Set (
116
+ collectionPublicationcodes . map (
117
+ ( publicationcode ) => publicationcode . split ( "/" ) [ 0 ] ,
118
+ ) ,
119
+ ) ,
120
+ ] ;
121
+
122
+ return {
123
+ issues,
124
+ countByCountrycode : await getCoaCountByCountrycode (
125
+ collectionCountrycodes ,
126
+ ) ,
127
+ countByPublicationcode : await getCoaCountByPublicationcode (
128
+ collectionPublicationcodes ,
129
+ ) ,
130
+ } ;
131
+ } )
68
132
. then ( callback ) ;
69
133
} ) ;
70
134
@@ -161,55 +225,6 @@ export default (socket: Socket<Events>) => {
161
225
callback ( output ) ;
162
226
} ) ;
163
227
164
- socket . on ( "getCoaCountByCountrycode" , async ( callback ) =>
165
- prismaCoa . inducks_issue
166
- . groupBy ( {
167
- _count : {
168
- issuenumber : true ,
169
- } ,
170
- where : {
171
- OR : ( await getCollectionCountrycodes ( socket . data . user ! . id ) ) . map (
172
- ( countrycode ) => ( {
173
- publicationcode : {
174
- startsWith : `${ countrycode } /` ,
175
- } ,
176
- } ) ,
177
- ) ,
178
- } ,
179
- by : [ "publicationcode" ] ,
180
- } )
181
- . then ( ( data ) =>
182
- data . reduce < Record < string , number > > ( ( acc , { publicationcode, _count } ) => {
183
- const countrycode = publicationcode ! . split ( "/" ) [ 0 ] ;
184
- acc [ countrycode ] = ( _count . issuenumber + ( acc [ countrycode ] || 0 ) ) ;
185
- return acc
186
- } , { } )
187
- )
188
- . then ( callback ) ,
189
- ) ;
190
-
191
- socket . on ( "getCoaCountByPublicationcode" , async ( callback ) =>
192
- prismaCoa . inducks_issue
193
- . groupBy ( {
194
- _count : {
195
- issuenumber : true ,
196
- } ,
197
- where : {
198
- publicationcode : {
199
- in : await getCollectionPublicationcodes ( socket . data . user ! . id ) ,
200
- } ,
201
- } ,
202
- by : [ "publicationcode" ] ,
203
- } )
204
- . then ( ( data ) => {
205
- callback (
206
- Object . fromEntries (
207
- data . map ( ( { publicationcode, _count } ) => [ publicationcode ! , _count . issuenumber ] )
208
- )
209
- ) ;
210
- } ) ,
211
- ) ;
212
-
213
228
socket . on ( "getCollectionQuotations" , async ( callback ) => {
214
229
callback ( {
215
230
quotations : (
0 commit comments