mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-08 22:53:25 +00:00
Compare commits
1 Commits
remove_ina
...
2.1.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dda6fc299a |
@@ -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
12
.vscode/settings.json
vendored
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
2
Makefile
2
Makefile
@@ -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
|
||||
|
||||
14
adonisrc.ts
14
adonisrc.ts
@@ -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')],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -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 ?? [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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`);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
(trap 'kill 0' SIGINT; node ace scheduler:run & pnpm run dev)
|
||||
|
||||
wait -n
|
||||
exit $?
|
||||
@@ -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
1505
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -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';
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import scheduler from 'adonisjs-scheduler/services/main';
|
||||
|
||||
scheduler.command('remove:inactive-users').cron('0 20 * * *');
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
(trap 'kill 0' SIGINT; node ace scheduler:run & pnpm start)
|
||||
|
||||
wait -n
|
||||
exit $?
|
||||
Reference in New Issue
Block a user