1 Commits

Author SHA1 Message Date
Sonny
dda6fc299a chore: release v2.1.3 2024-09-18 17:01:49 +02:00
13 changed files with 831 additions and 780 deletions

View File

@@ -13,4 +13,4 @@ DB_PASSWORD=my-links-pwd
DB_DATABASE=my-links
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CLIENT_CALLBACK_URL=http://localhost:3333/auth/callback
GOOGLE_CLIENT_CALLBACK_URL=http://localhost:3333/auth/callback

12
.vscode/settings.json vendored
View File

@@ -1,13 +1,3 @@
{
"typescript.preferences.importModuleSpecifier": "non-relative",
/* Prefer tabs over spaces for accessibility */
"editor.insertSpaces": true,
"editor.detectIndentation": false,
/* Explorer */
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts",
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, rollup.config.mjs, tsconfig.json, eslint.config.js",
"Makefile": "*compose.yml, Dockerfile, .dockerignore, *startup.sh"
}
"typescript.preferences.importModuleSpecifier": "non-relative"
}

View File

@@ -53,10 +53,9 @@ ENV PORT=$PORT
WORKDIR /app
COPY --from=production-deps /app/node_modules /app/node_modules
COPY --from=build /app/build /app
COPY --from=build /app/startup.sh /app/startup.sh
# Expose port
EXPOSE $PORT
# Start app
CMD node bin/console.js migration:run --force && sh startup.sh
CMD node bin/console.js migration:run --force && node bin/server.js

View File

@@ -2,7 +2,7 @@ dev:
@docker compose down
@docker compose -f dev.docker-compose.yml up -d --wait
@node ace migration:fresh
@./dev.startup.sh
@pnpm run dev
prod:
@docker compose -f dev.docker-compose.yml down

View File

@@ -14,7 +14,6 @@ export default defineConfig({
() => import('@adonisjs/core/commands'),
() => import('@adonisjs/lucid/commands'),
() => import('@izzyjs/route/commands'),
() => import('adonisjs-scheduler/commands'),
],
/*
@@ -46,10 +45,6 @@ export default defineConfig({
() => import('@adonisjs/ally/ally_provider'),
() => import('@izzyjs/route/izzy_provider'),
() => import('#providers/route_provider'),
{
file: () => import('adonisjs-scheduler/scheduler_provider'),
environment: ['console'],
},
],
/*
@@ -60,14 +55,7 @@ export default defineConfig({
| List of modules to import before starting the application.
|
*/
preloads: [
() => import('#start/routes'),
() => import('#start/kernel'),
{
file: () => import('#start/scheduler'),
environment: ['console'],
},
],
preloads: [() => import('#start/routes'), () => import('#start/kernel')],
/*
|--------------------------------------------------------------------------

View File

@@ -4,8 +4,6 @@ import logger from '@adonisjs/core/services/logger';
import db from '@adonisjs/lucid/services/db';
import { RouteName } from '@izzyjs/route/types';
const INACTIVE_USER_THRESHOLD = 7;
export default class UsersController {
private redirectTo: RouteName = 'auth.login';
@@ -77,18 +75,4 @@ export default class UsersController {
.withCount('collections', (q) => q.as('totalCollections'))
.withCount('links', (q) => q.as('totalLinks'));
}
async getAllInactiveUsers() {
const users = await this.getAllUsersWithTotalRelations();
const inactiveUsers = users.filter((user) => {
const totalLinks = Number(user.$extras.totalLinks);
const totalCollections = Number(user.$extras.totalCollections);
const isOlderThan7Days =
Math.abs(user.updatedAt.diffNow('days').days) > INACTIVE_USER_THRESHOLD;
return (totalLinks === 0 || totalCollections === 0) && isOlderThan7Days;
});
return inactiveUsers ?? [];
}
}

View File

@@ -1,18 +0,0 @@
import UsersController from '#controllers/users_controller';
import { inject } from '@adonisjs/core';
import { BaseCommand } from '@adonisjs/core/ace';
import type { CommandOptions } from '@adonisjs/core/types/ace';
export default class RemoveInactiveUsers extends BaseCommand {
static commandName = 'remove:inactive-users';
static description = '';
static options: CommandOptions = {};
@inject()
async run(usersController: UsersController) {
const inactiveUsers = await usersController.getAllInactiveUsers();
await Promise.all(inactiveUsers.map((user) => user.delete()));
console.log(`Removed ${inactiveUsers.length} inactive users`);
}
}

View File

@@ -1,6 +0,0 @@
#!/bin/bash
(trap 'kill 0' SIGINT; node ace scheduler:run & pnpm run dev)
wait -n
exit $?

View File

@@ -1,6 +1,6 @@
{
"name": "my-links",
"version": "2.1.2",
"version": "2.1.3",
"type": "module",
"license": "UNLICENSED",
"scripts": {
@@ -33,8 +33,7 @@
"#tests/*": "./tests/*.js",
"#start/*": "./start/*.js",
"#config/*": "./config/*.js",
"#lib/*": "./app/lib/*.js",
"#routes/*": "./start/routes/*.js"
"#lib/*": "./app/lib/*.js"
},
"devDependencies": {
"@adonisjs/assembler": "^7.8.2",
@@ -82,7 +81,6 @@
"@izzyjs/route": "^1.1.0-0",
"@tanstack/react-table": "^8.20.5",
"@vinejs/vine": "^2.1.0",
"adonisjs-scheduler": "^1.0.5",
"bentocache": "^1.0.0-beta.9",
"dayjs": "^1.11.13",
"edge.js": "^6.0.2",
@@ -126,4 +124,4 @@
"volta": {
"node": "22.2.0"
}
}
}

1505
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
import '#routes/admin';
import '#routes/app';
import '#routes/auth';
import '#routes/collection';
import '#routes/favicon';
import '#routes/link';
import '#routes/search';
import '#routes/shared_collection';
import './routes/admin.js';
import './routes/app.js';
import './routes/auth.js';
import './routes/collection.js';
import './routes/favicon.js';
import './routes/link.js';
import './routes/search.js';
import './routes/shared_collection.js';

View File

@@ -1,3 +0,0 @@
import scheduler from 'adonisjs-scheduler/services/main';
scheduler.command('remove:inactive-users').cron('0 20 * * *');

View File

@@ -1,6 +0,0 @@
#!/bin/bash
(trap 'kill 0' SIGINT; node ace scheduler:run & pnpm start)
wait -n
exit $?