implemented a lot of features
This commit is contained in:
1 parent
62f1767df3
commit
bcb9be5da9
141 files changed
+10705
-385
No files matched your search
@@ -0,0 +1,43 @@
|
||||
import { BaseSchema } from '@adonisjs/lucid/schema'
|
||||
|
||||
/**
|
||||
* Web interface (CONCEPT.md D22): trigram indexes for substring search, and
|
||||
* SQL versions of the "readable name" rule used for filtering.
|
||||
*/
|
||||
export default class extends BaseSchema {
|
||||
async up() {
|
||||
this.defer(async (db) => {
|
||||
await db.rawQuery('CREATE EXTENSION IF NOT EXISTS pg_trgm')
|
||||
// Per-file suffixes stripped, as in lib/release fileStem.
|
||||
await db.rawQuery(`
|
||||
CREATE OR REPLACE FUNCTION name_stem(name text) RETURNS text IMMUTABLE LANGUAGE sql AS $$
|
||||
SELECT regexp_replace(name,
|
||||
'(\\.(part\\d+\\.rar|r\\d{2,3}|rar|vol\\d+[+-]\\d+\\.par2|par2|7z(\\.\\d{3})?|zip|\\d{3}|nfo|sfv|nzb|tar|zst|gz|xz|mkv|mp4|avi|m4v|ts|iso|img|flac|mp3|epub|pdf|jpg|png))+$',
|
||||
'', 'i')
|
||||
$$`)
|
||||
// Not an obfuscated token (as in ArchiveService.looksRandom).
|
||||
await db.rawQuery(`
|
||||
CREATE OR REPLACE FUNCTION is_readable_name(name text) RETURNS boolean IMMUTABLE LANGUAGE sql AS $$
|
||||
SELECT name IS NOT NULL AND NOT (
|
||||
(name_stem(name) ~ '^[A-Za-z0-9]{16,}$' AND name_stem(name) ~ '\\d'
|
||||
AND name_stem(name) ~ '[a-z]' AND name_stem(name) ~ '[A-Z]')
|
||||
OR name_stem(name) ~* '^[0-9a-f]{16,}$')
|
||||
$$`)
|
||||
await db.rawQuery('CREATE INDEX IF NOT EXISTS releases_name_trgm ON releases USING gin (name gin_trgm_ops)')
|
||||
await db.rawQuery('CREATE INDEX IF NOT EXISTS files_filename_trgm ON files USING gin (filename gin_trgm_ops)')
|
||||
await db.rawQuery('CREATE INDEX IF NOT EXISTS files_real_name_trgm ON files USING gin (real_name gin_trgm_ops)')
|
||||
await db.rawQuery('CREATE INDEX IF NOT EXISTS releases_posted_at_idx ON releases (posted_at DESC NULLS LAST)')
|
||||
})
|
||||
}
|
||||
|
||||
async down() {
|
||||
this.defer(async (db) => {
|
||||
await db.rawQuery('DROP INDEX IF EXISTS releases_posted_at_idx')
|
||||
await db.rawQuery('DROP INDEX IF EXISTS files_real_name_trgm')
|
||||
await db.rawQuery('DROP INDEX IF EXISTS files_filename_trgm')
|
||||
await db.rawQuery('DROP INDEX IF EXISTS releases_name_trgm')
|
||||
await db.rawQuery('DROP FUNCTION IF EXISTS is_readable_name(text)')
|
||||
await db.rawQuery('DROP FUNCTION IF EXISTS name_stem(text)')
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user