mirror of
https://github.com/TheRealOwenRees/echecsfrance.git
synced 2026-07-23 12:36:57 +00:00
Update packages
This commit is contained in:
@@ -8,7 +8,7 @@ import { TimeControl, Tournament, tcMap } from "@/types";
|
||||
import { errorLog } from "@/utils/logger";
|
||||
import { removeDiacritics } from "@/utils/string";
|
||||
|
||||
import { action } from "./safeAction";
|
||||
import { actionClient } from "./safeAction";
|
||||
|
||||
const inputSchema = z.object({
|
||||
searchValue: z.string(),
|
||||
@@ -28,66 +28,69 @@ export type SearchedTournament = Pick<
|
||||
| "url"
|
||||
>;
|
||||
|
||||
export const searchTournaments = action(inputSchema, async (input) => {
|
||||
try {
|
||||
await dbConnect();
|
||||
export const searchTournaments = actionClient
|
||||
.schema(inputSchema)
|
||||
.action(async (input) => {
|
||||
const { searchValue, limit } = input.parsedInput;
|
||||
try {
|
||||
await dbConnect();
|
||||
|
||||
const searchTerms = input.searchValue
|
||||
.split(" ")
|
||||
.map((s) => removeDiacritics(s.trim()))
|
||||
.filter((s) => s !== "")
|
||||
.map((s) => ({ tournament_index: { $regex: s, $options: "i" } }));
|
||||
const searchTerms = searchValue
|
||||
.split(" ")
|
||||
.map((s) => removeDiacritics(s.trim()))
|
||||
.filter((s) => s !== "")
|
||||
.map((s) => ({ tournament_index: { $regex: s, $options: "i" } }));
|
||||
|
||||
const data = await collections
|
||||
.tournaments!.aggregate([
|
||||
{
|
||||
$addFields: {
|
||||
dateParts: {
|
||||
$dateFromString: {
|
||||
dateString: "$start_date",
|
||||
format: "%d/%m/%Y",
|
||||
const data = await collections
|
||||
.tournaments!.aggregate([
|
||||
{
|
||||
$addFields: {
|
||||
dateParts: {
|
||||
$dateFromString: {
|
||||
dateString: "$start_date",
|
||||
format: "%d/%m/%Y",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
$and: [
|
||||
{ federation: { $eq: "FFE" } },
|
||||
{ dateParts: { $lte: endOfDay(new Date()) } },
|
||||
...searchTerms,
|
||||
],
|
||||
{
|
||||
$match: {
|
||||
$and: [
|
||||
{ federation: { $eq: "FFE" } },
|
||||
{ dateParts: { $lte: endOfDay(new Date()) } },
|
||||
...searchTerms,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
dateParts: -1,
|
||||
{
|
||||
$sort: {
|
||||
dateParts: -1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{ $limit: input.limit ?? 20 },
|
||||
{
|
||||
$unset: "dateParts",
|
||||
},
|
||||
])
|
||||
.toArray();
|
||||
{ $limit: limit ?? 20 },
|
||||
{
|
||||
$unset: "dateParts",
|
||||
},
|
||||
])
|
||||
.toArray();
|
||||
|
||||
return data.map<SearchedTournament>((t) => {
|
||||
const timeControl = tcMap[t.time_control] ?? TimeControl.Other;
|
||||
return data.map<SearchedTournament>((t) => {
|
||||
const timeControl = tcMap[t.time_control] ?? TimeControl.Other;
|
||||
|
||||
return {
|
||||
id: t._id.toString(),
|
||||
ffeId: t.tournament_id,
|
||||
tournament: t.tournament,
|
||||
town: t.town,
|
||||
department: t.department,
|
||||
date: t.start_date,
|
||||
url: t.url,
|
||||
timeControl,
|
||||
status: t.status,
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
errorLog(JSON.stringify(error, null, 2));
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
return {
|
||||
id: t._id.toString(),
|
||||
ffeId: t.tournament_id,
|
||||
tournament: t.tournament,
|
||||
town: t.town,
|
||||
department: t.department,
|
||||
date: t.start_date,
|
||||
url: t.url,
|
||||
timeControl,
|
||||
status: t.status,
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
errorLog(JSON.stringify(error, null, 2));
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user