Skip to content

Commit 83766ee

Browse files
committed
Use Deno.cron to update POTD
1 parent df44dcf commit 83766ee

File tree

5 files changed

+151
-160
lines changed

5 files changed

+151
-160
lines changed

deno.jsonc

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"oak/": "https://deno.land/x/[email protected]/"
55
},
66
"tasks": {
7-
// TODO: Remove `--unstable` once KV becomes stable
87
"dev": "deno run --unstable --allow-net --allow-read --watch src/index.ts",
98
"lume": "echo \"import 'lume/cli.ts'\" | deno run --unstable -A -",
109
"build": "deno task lume",

deno.lock

+127-129
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/controllers/pokemon.controller.ts

+21-25
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getQuery } from 'oak/helpers.ts';
22
import { RouterMiddleware } from 'oak/mod.ts';
3-
import { Pokemon, PokemonOfTheDay } from '../models/pokemon.ts';
3+
import { Pokemon } from '../models/pokemon.ts';
44

55
export const getPokemon: RouterMiddleware<
66
'/',
@@ -31,7 +31,7 @@ export const getPokemon: RouterMiddleware<
3131
};
3232

3333
export const getPokemonDetail: RouterMiddleware<'/:idOrName'> = async (
34-
context,
34+
context
3535
) => {
3636
const idOrName = Number.isNaN(Number(context.params.idOrName))
3737
? decodeURIComponent(context.params.idOrName!).toLowerCase()
@@ -56,44 +56,27 @@ export const getPokemonDetail: RouterMiddleware<'/:idOrName'> = async (
5656
};
5757

5858
export const getPokemonOfTheDay: RouterMiddleware<'/potd'> = async (
59-
context,
59+
context
6060
) => {
61-
const pool = 905;
62-
const todaysDate = new Date().toDateString();
63-
6461
try {
6562
const kv = await Deno.openKv();
66-
const { value } = await kv.get<PokemonOfTheDay>(['potd']);
67-
if (value && value.date === todaysDate) {
68-
context.response.body = value.pokemon;
69-
kv.close();
70-
} else {
71-
const randomNumber = Math.ceil(Math.random() * pool);
72-
const { value: pokemonData } = await kv.get<Pokemon>([
73-
'pokemon',
74-
randomNumber,
75-
]);
76-
await kv.set(['potd'], {
77-
pokemon: pokemonData,
78-
date: todaysDate,
79-
});
80-
context.response.body = pokemonData;
81-
kv.close();
82-
}
63+
const { value } = await kv.get<Pokemon>(['potd']);
64+
context.response.body = value;
65+
kv.close();
8366
} catch (error) {
8467
console.log(error);
8568
context.throw(500, 'Internal server error');
8669
}
8770
};
8871

8972
export const migratePokemonToKv: RouterMiddleware<'/migrate'> = async (
90-
context,
73+
context
9174
) => {
9275
const body = context.request.body({ type: 'json' });
9376
const { id } = await body.value;
9477

9578
const p: Pokemon = JSON.parse(
96-
await Deno.readTextFile(`assets/data/${id}.json`),
79+
await Deno.readTextFile(`assets/data/${id}.json`)
9780
);
9881

9982
const primaryKey = ['pokemon', p.id];
@@ -114,3 +97,16 @@ export const migratePokemonToKv: RouterMiddleware<'/migrate'> = async (
11497

11598
context.response.body = 'Success!';
11699
};
100+
101+
export const setPokemonOfTheDay = async () => {
102+
const pool = 905;
103+
const kv = await Deno.openKv();
104+
105+
const randomNumber = Math.ceil(Math.random() * pool);
106+
const { value: pokemonData } = await kv.get<Pokemon>([
107+
'pokemon',
108+
randomNumber,
109+
]);
110+
await kv.set(['potd'], pokemonData);
111+
kv.close();
112+
};

src/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { oakCors } from 'https://deno.land/x/[email protected]/mod.ts';
22
import { Application } from 'https://deno.land/x/[email protected]/mod.ts';
3+
import { setPokemonOfTheDay } from './controllers/pokemon.controller.ts';
34
import PokemonRouter from './routes/pokemon.route.ts';
45

56
const app = new Application();
@@ -20,3 +21,5 @@ app.use(async (context, next) => {
2021
app.use(PokemonRouter.routes(), PokemonRouter.allowedMethods());
2122

2223
app.listen({ port: 8000 });
24+
25+
Deno.cron('potd', '0 0 * * *', setPokemonOfTheDay);

src/models/pokemon.ts

-5
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,3 @@ export type Pokemon = {
1717
stats: Record<string, number>;
1818
locations: string[];
1919
};
20-
21-
export type PokemonOfTheDay = {
22-
pokemon: Pokemon;
23-
date: string;
24-
};

0 commit comments

Comments
 (0)