chore: fix usage issues
This commit is contained in:
parent
0f8b6c6b29
commit
aa2fb4f5b9
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@ -24,6 +24,10 @@ jobs:
|
|||||||
- name: "Install dependencies"
|
- name: "Install dependencies"
|
||||||
run: "pnpm install --frozen-lockfile"
|
run: "pnpm install --frozen-lockfile"
|
||||||
|
|
||||||
|
- run: "cp .env.example .env"
|
||||||
|
- run: "cp apps/website/.env.example apps/website/.env"
|
||||||
|
- run: "cp apps/api/.env.example apps/api/.env"
|
||||||
|
|
||||||
# - name: "Install Playwright"
|
# - name: "Install Playwright"
|
||||||
# run: "pnpm exec playwright install --with-deps"
|
# run: "pnpm exec playwright install --with-deps"
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ pnpm exec playwright install --with-deps
|
|||||||
node --run dev
|
node --run dev
|
||||||
|
|
||||||
# Start the development Docker services (e.g: Database)
|
# Start the development Docker services (e.g: Database)
|
||||||
docker compose up --file compose.dev.yaml
|
docker compose --file compose.dev.yaml up
|
||||||
|
|
||||||
# Lint
|
# Lint
|
||||||
node --run lint:editorconfig
|
node --run lint:editorconfig
|
||||||
|
16
TODO.md
16
TODO.md
@ -29,9 +29,21 @@
|
|||||||
- [ ] Update logic to create custom `internal_links` table to make it work with latest wikipedia dumps (notably concerning the change in `pagelinks.sql` where the title is not included anymore, but instead it uses `pl_target_id`, foreign key to `linktarget`), last tested dumb working `20240420`
|
- [ ] Update logic to create custom `internal_links` table to make it work with latest wikipedia dumps (notably concerning the change in `pagelinks.sql` where the title is not included anymore, but instead it uses `pl_target_id`, foreign key to `linktarget`), last tested dumb working `20240420`
|
||||||
- [ ] Handle redirects
|
- [ ] Handle redirects
|
||||||
- [ ] Implement REST API (`api`) with JSON responses ([AdonisJS](https://adonisjs.com/)) to get shortest paths between 2 pages
|
- [ ] Implement REST API (`api`) with JSON responses ([AdonisJS](https://adonisjs.com/)) to get shortest paths between 2 pages
|
||||||
- [ ] Implement Wikipedia Game Solver (`website`) with inputs, button to submit, and list all pages to go from one to another, or none if it is not possible
|
- [x] Init AdonisJS project
|
||||||
- [ ] Implement toast notifications for errors, warnings, and success messages
|
- [ ] Create Lucid models and migrations for Wikipedia Database Dump: `pages` and `internal_links` tables
|
||||||
|
- [ ] Implement `GET /wikipedia/pages?title=Node.js` to search a page by title (not necessarily with the title sanitized, search with input by user to check if page exists)
|
||||||
|
- [ ] Implement `GET /wikipedia/pages/internal-links/paths?from=Node.js&to=Linux` to get all the possible paths between 2 pages with titles sanitized
|
||||||
|
- [ ] Implement Wikipedia Game Solver (`website`)
|
||||||
|
- [x] Init Next.js project
|
||||||
|
- [ ] Try to use <https://www.npmjs.com/package/@tuyau/client> for API calls
|
||||||
|
- [ ] Hard code 2 pages to test if it works with `console.log` in the browser
|
||||||
|
- [ ] Implement a form with inputs, button to submit, and list all pages to go from one to another, or none if it is not possible
|
||||||
|
- [ ] Add images, links to the pages + good UI/UX
|
||||||
|
- [ ] Implement toast notifications for errors, warnings, and success messages
|
||||||
|
- [ ] Autocompletion page titles
|
||||||
- [ ] Implement CLI (`cli`)
|
- [ ] Implement CLI (`cli`)
|
||||||
|
- [ ] Init Clipanion project
|
||||||
|
- [ ] Implement `wikipedia-game-solver internal-links --from="Node.js" --to="Linux"` command to get all the possible paths between 2 pages.
|
||||||
- [ ] Add docs to add locale/edit translations, create component, install a dependency in a package, create a new package, technology used, architecture, links where it's deployed, how to use/install for end users, how to update dependencies with `npx taze -l` etc.
|
- [ ] Add docs to add locale/edit translations, create component, install a dependency in a package, create a new package, technology used, architecture, links where it's deployed, how to use/install for end users, how to update dependencies with `npx taze -l` etc.
|
||||||
- [ ] GitHub Mirror
|
- [ ] GitHub Mirror
|
||||||
- [ ] Delete `TODO.md` file and instead use issues for the remaining tasks
|
- [ ] Delete `TODO.md` file and instead use issues for the remaining tasks
|
||||||
|
@ -36,6 +36,9 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
preloads: [
|
preloads: [
|
||||||
|
async () => {
|
||||||
|
return await import("#start/database.js")
|
||||||
|
},
|
||||||
async () => {
|
async () => {
|
||||||
return await import("#start/routes.js")
|
return await import("#start/routes.js")
|
||||||
},
|
},
|
||||||
|
@ -18,16 +18,18 @@ const AuthFinder = withAuthFinder(
|
|||||||
export default class User extends compose(BaseModel, AuthFinder) {
|
export default class User extends compose(BaseModel, AuthFinder) {
|
||||||
protected tableName = "users"
|
protected tableName = "users"
|
||||||
|
|
||||||
@column({ columnName: "id", isPrimary: true })
|
@column({ columnName: "id", serializeAs: "id", isPrimary: true })
|
||||||
declare id: number
|
declare id: number
|
||||||
|
|
||||||
@column({
|
@column({
|
||||||
columnName: "full_name",
|
columnName: "full_name",
|
||||||
|
serializeAs: "fullName",
|
||||||
})
|
})
|
||||||
declare fullName: string | null
|
declare fullName: string | null
|
||||||
|
|
||||||
@column({
|
@column({
|
||||||
columnName: "email",
|
columnName: "email",
|
||||||
|
serializeAs: "email",
|
||||||
})
|
})
|
||||||
declare email: string
|
declare email: string
|
||||||
|
|
||||||
@ -36,12 +38,14 @@ export default class User extends compose(BaseModel, AuthFinder) {
|
|||||||
|
|
||||||
@column.dateTime({
|
@column.dateTime({
|
||||||
columnName: "created_at",
|
columnName: "created_at",
|
||||||
|
serializeAs: "createdAt",
|
||||||
autoCreate: true,
|
autoCreate: true,
|
||||||
})
|
})
|
||||||
declare createdAt: DateTime
|
declare createdAt: DateTime
|
||||||
|
|
||||||
@column.dateTime({
|
@column.dateTime({
|
||||||
columnName: "updated_at",
|
columnName: "updated_at",
|
||||||
|
serializeAs: "updatedAt",
|
||||||
autoCreate: true,
|
autoCreate: true,
|
||||||
autoUpdate: true,
|
autoUpdate: true,
|
||||||
})
|
})
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { defineConfig, drivers } from '@adonisjs/core/hash'
|
import { defineConfig, drivers } from "@adonisjs/core/hash"
|
||||||
|
|
||||||
const hashConfig = defineConfig({
|
const hashConfig = defineConfig({
|
||||||
default: 'scrypt',
|
default: "scrypt",
|
||||||
|
|
||||||
list: {
|
list: {
|
||||||
scrypt: drivers.scrypt({
|
scrypt: drivers.scrypt({
|
||||||
@ -19,6 +19,6 @@ export default hashConfig
|
|||||||
* Inferring types for the list of hashers you have configured
|
* Inferring types for the list of hashers you have configured
|
||||||
* in your application.
|
* in your application.
|
||||||
*/
|
*/
|
||||||
declare module '@adonisjs/core/types' {
|
declare module "@adonisjs/core/types" {
|
||||||
export interface HashersList extends InferHashers<typeof hashConfig> {}
|
export interface HashersList extends InferHashers<typeof hashConfig> {}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ export default class CreateUsersTable extends BaseSchema {
|
|||||||
protected tableName = "users"
|
protected tableName = "users"
|
||||||
|
|
||||||
public override async up(): Promise<void> {
|
public override async up(): Promise<void> {
|
||||||
await this.schema.createTable(this.tableName, (table) => {
|
void this.schema.createTable(this.tableName, (table) => {
|
||||||
table.increments("id").notNullable()
|
table.increments("id").notNullable()
|
||||||
table.string("full_name").nullable()
|
table.string("full_name").nullable()
|
||||||
table.string("email", 254).notNullable().unique()
|
table.string("email", 254).notNullable().unique()
|
||||||
@ -16,6 +16,6 @@ export default class CreateUsersTable extends BaseSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override async down(): Promise<void> {
|
public override async down(): Promise<void> {
|
||||||
await this.schema.dropTable(this.tableName)
|
void this.schema.dropTable(this.tableName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ export default class CreateAccessTokensTable extends BaseSchema {
|
|||||||
protected tableName = "auth_access_tokens"
|
protected tableName = "auth_access_tokens"
|
||||||
|
|
||||||
public override async up(): Promise<void> {
|
public override async up(): Promise<void> {
|
||||||
await this.schema.createTable(this.tableName, (table) => {
|
void this.schema.createTable(this.tableName, (table) => {
|
||||||
table.increments("id")
|
table.increments("id")
|
||||||
table
|
table
|
||||||
.integer("tokenable_id")
|
.integer("tokenable_id")
|
||||||
@ -26,6 +26,6 @@ export default class CreateAccessTokensTable extends BaseSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override async down(): Promise<void> {
|
public override async down(): Promise<void> {
|
||||||
await this.schema.dropTable(this.tableName)
|
void this.schema.dropTable(this.tableName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
apps/api/src/start/database.ts
Normal file
3
apps/api/src/start/database.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { BaseModel, CamelCaseNamingStrategy } from "@adonisjs/lucid/orm"
|
||||||
|
|
||||||
|
BaseModel.namingStrategy = new CamelCaseNamingStrategy()
|
@ -9,7 +9,7 @@ services:
|
|||||||
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_DATABASE: ${DATABASE_NAME}
|
MARIADB_DATABASE: ${DATABASE_NAME}
|
||||||
command:
|
command: |
|
||||||
--innodb_buffer_pool_size=4G
|
--innodb_buffer_pool_size=4G
|
||||||
--key-buffer-size=4G
|
--key-buffer-size=4G
|
||||||
--innodb_log_buffer_size=256M
|
--innodb_log_buffer_size=256M
|
||||||
@ -33,9 +33,9 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
ADMINER_DEFAULT_SERVER: "wikipedia-solver-dev-database"
|
ADMINER_DEFAULT_SERVER: "wikipedia-solver-dev-database"
|
||||||
volumes:
|
volumes:
|
||||||
- "./adminer/default-orange.css:/var/www/html/adminer.css"
|
- "./data/adminer/default-orange.css:/var/www/html/adminer.css"
|
||||||
- "./adminer/logo.png:/var/www/html/logo.png"
|
- "./data/adminer/logo.png:/var/www/html/logo.png"
|
||||||
- "./adminer/fonts/:/var/www/html/fonts"
|
- "./data/adminer/fonts/:/var/www/html/fonts"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
wikipedia-solver-dev-mariadb-data:
|
wikipedia-solver-dev-mariadb-data:
|
||||||
|
@ -35,7 +35,7 @@ services:
|
|||||||
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_DATABASE: ${DATABASE_NAME}
|
MARIADB_DATABASE: ${DATABASE_NAME}
|
||||||
command:
|
command: |
|
||||||
--innodb_buffer_pool_size=4G
|
--innodb_buffer_pool_size=4G
|
||||||
--key-buffer-size=4G
|
--key-buffer-size=4G
|
||||||
--innodb_log_buffer_size=256M
|
--innodb_log_buffer_size=256M
|
||||||
|
@ -9,7 +9,7 @@ services:
|
|||||||
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
MARIADB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
MARIADB_DATABASE: ${DATABASE_NAME}
|
MARIADB_DATABASE: ${DATABASE_NAME}
|
||||||
command:
|
command: |
|
||||||
--innodb_buffer_pool_size=4G
|
--innodb_buffer_pool_size=4G
|
||||||
--key-buffer-size=4G
|
--key-buffer-size=4G
|
||||||
--innodb_log_buffer_size=256M
|
--innodb_log_buffer_size=256M
|
||||||
|
462
pnpm-lock.yaml
generated
462
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user