mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-28 20:40:39 +00:00
Colocate more root resolvers
This commit is contained in:
parent
cef3122d5c
commit
d98f9ae0a2
13 changed files with 108 additions and 109 deletions
|
|
@ -3,6 +3,7 @@ import SkinModel from "../../data/SkinModel";
|
|||
import { knex } from "../../db";
|
||||
import ModernSkinResolver from "./resolvers/ModernSkinResolver";
|
||||
import { Ctx } from ".";
|
||||
import { Query } from "./resolvers/QueryResolver";
|
||||
|
||||
/**
|
||||
* A collection of "modern" Winamp skins
|
||||
|
|
@ -43,3 +44,22 @@ export default class ModernSkinsConnection {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* All modern skins in the database
|
||||
* @gqlField */
|
||||
export async function modern_skins(
|
||||
_: Query,
|
||||
{
|
||||
first = 10,
|
||||
offset = 0,
|
||||
}: {
|
||||
first?: Int;
|
||||
offset?: Int;
|
||||
}
|
||||
): Promise<ModernSkinsConnection> {
|
||||
if (first > 1000) {
|
||||
throw new Error("Maximum limit is 1000");
|
||||
}
|
||||
return new ModernSkinsConnection(first, offset);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import LRU from "lru-cache";
|
|||
import { Int } from "grats";
|
||||
import { ISkin } from "./resolvers/CommonSkinResolver";
|
||||
import { Ctx } from ".";
|
||||
import { Query } from "./resolvers/QueryResolver";
|
||||
|
||||
const options = {
|
||||
max: 100,
|
||||
|
|
@ -127,3 +128,66 @@ export default class SkinsConnection {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** @gqlEnum */
|
||||
type SkinsSortOption =
|
||||
/**
|
||||
the Museum's (https://skins.webamp.org) special sorting rules.
|
||||
|
||||
Roughly speaking, it's:
|
||||
|
||||
1. The four classic default skins
|
||||
2. Tweeted skins first (sorted by the number of likes/retweets)
|
||||
3. Approved, but not tweeted yet, skins
|
||||
4. Unreviwed skins
|
||||
5. Rejected skins
|
||||
6. NSFW skins
|
||||
*/
|
||||
"MUSEUM";
|
||||
|
||||
/** @gqlEnum */
|
||||
type SkinsFilterOption =
|
||||
/*
|
||||
Only the skins that have been approved for tweeting
|
||||
*/
|
||||
| "APPROVED"
|
||||
|
||||
/*
|
||||
Only the skins that have been rejected for tweeting
|
||||
*/
|
||||
| "REJECTED"
|
||||
|
||||
/*
|
||||
Only the skins that have been marked NSFW
|
||||
*/
|
||||
| "NSFW"
|
||||
|
||||
/*
|
||||
Only the skins that have been tweeted
|
||||
*/
|
||||
| "TWEETED";
|
||||
|
||||
/**
|
||||
* All classic skins in the database
|
||||
*
|
||||
* **Note:** We don't currently support combining sorting and filtering.
|
||||
* @gqlField */
|
||||
export function skins(
|
||||
_: Query,
|
||||
{
|
||||
first = 10,
|
||||
offset = 0,
|
||||
sort,
|
||||
filter,
|
||||
}: {
|
||||
first?: Int;
|
||||
offset?: Int;
|
||||
sort?: SkinsSortOption | null;
|
||||
filter?: SkinsFilterOption | null;
|
||||
}
|
||||
): SkinsConnection {
|
||||
if (first > 1000) {
|
||||
throw new Error("Maximum limit is 1000");
|
||||
}
|
||||
return new SkinsConnection(first, offset, sort, filter);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Int } from "grats";
|
||||
import TweetModel from "../../data/TweetModel";
|
||||
import { knex } from "../../db";
|
||||
import { Query } from "./resolvers/RootResolver";
|
||||
import { Query } from "./resolvers/QueryResolver";
|
||||
|
||||
/** @gqlEnum */
|
||||
export type TweetsSortOption = "LIKES" | "RETWEETS";
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Int } from "grats";
|
||||
import * as Skins from "../../../data/skins";
|
||||
import { Query } from "./RootResolver";
|
||||
import { Query } from "./QueryResolver";
|
||||
|
||||
/**
|
||||
* Statistics about the contents of the Museum's database.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { ID } from "grats";
|
||||
import { Query } from "./RootResolver";
|
||||
import { Query } from "./QueryResolver";
|
||||
import { Ctx } from "..";
|
||||
import SkinModel from "../../../data/SkinModel";
|
||||
import SkinResolver from "./SkinResolver";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
/** @gqlType Query */
|
||||
export type Query = unknown;
|
||||
|
|
@ -5,7 +5,7 @@ import UserContext from "../../../data/UserContext";
|
|||
import ClassicSkinResolver from "./ClassicSkinResolver";
|
||||
import { ISkin } from "./CommonSkinResolver";
|
||||
import ModernSkinResolver from "./ModernSkinResolver";
|
||||
import { Query } from "./RootResolver";
|
||||
import { Query } from "./QueryResolver";
|
||||
import algoliasearch from "algoliasearch";
|
||||
import * as Skins from "../../../data/skins";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,59 +1,10 @@
|
|||
import SkinModel from "../../../data/SkinModel";
|
||||
import SkinResolver from "../resolvers/SkinResolver";
|
||||
import SkinsConnection from "../SkinsConnection";
|
||||
import { Int } from "grats";
|
||||
|
||||
import { knex } from "../../../db";
|
||||
import ModernSkinsConnection from "../ModernSkinsConnection";
|
||||
import { ISkin } from "./CommonSkinResolver";
|
||||
import { Ctx } from "..";
|
||||
|
||||
/** @gqlType Query */
|
||||
export type Query = unknown;
|
||||
|
||||
/**
|
||||
* All classic skins in the database
|
||||
*
|
||||
* **Note:** We don't currently support combining sorting and filtering.
|
||||
* @gqlField */
|
||||
export function skins(
|
||||
_: Query,
|
||||
{
|
||||
first = 10,
|
||||
offset = 0,
|
||||
sort,
|
||||
filter,
|
||||
}: {
|
||||
first?: Int;
|
||||
offset?: Int;
|
||||
sort?: SkinsSortOption | null;
|
||||
filter?: SkinsFilterOption | null;
|
||||
}
|
||||
): SkinsConnection {
|
||||
if (first > 1000) {
|
||||
throw new Error("Maximum limit is 1000");
|
||||
}
|
||||
return new SkinsConnection(first, offset, sort, filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* All modern skins in the database
|
||||
* @gqlField */
|
||||
export async function modern_skins(
|
||||
_: Query,
|
||||
{
|
||||
first = 10,
|
||||
offset = 0,
|
||||
}: {
|
||||
first?: Int;
|
||||
offset?: Int;
|
||||
}
|
||||
): Promise<ModernSkinsConnection> {
|
||||
if (first > 1000) {
|
||||
throw new Error("Maximum limit is 1000");
|
||||
}
|
||||
return new ModernSkinsConnection(first, offset);
|
||||
}
|
||||
import SkinModel from "../../../data/SkinModel";
|
||||
import UserContext from "../../../data/UserContext";
|
||||
import { knex } from "../../../db";
|
||||
import { ISkin } from "./CommonSkinResolver";
|
||||
import { Query } from "./QueryResolver";
|
||||
import SkinResolver from "./SkinResolver";
|
||||
|
||||
/**
|
||||
* Get the status of a batch of uploads by md5s
|
||||
|
|
@ -80,7 +31,7 @@ export async function upload_statuses(
|
|||
}
|
||||
|
||||
// Shared implementation for upload_statuses and upload_statuses_by_md5
|
||||
async function _upload_statuses({ keyName, keys }, ctx) {
|
||||
async function _upload_statuses({ keyName, keys }, ctx: UserContext) {
|
||||
const skins = await knex("skin_uploads")
|
||||
.whereIn(keyName, keys)
|
||||
.orderBy("id", "desc")
|
||||
|
|
@ -122,44 +73,6 @@ type SkinUpload = {
|
|||
upload_md5: string;
|
||||
};
|
||||
|
||||
/** @gqlEnum */
|
||||
type SkinsSortOption =
|
||||
/**
|
||||
the Museum's (https://skins.webamp.org) special sorting rules.
|
||||
|
||||
Roughly speaking, it's:
|
||||
|
||||
1. The four classic default skins
|
||||
2. Tweeted skins first (sorted by the number of likes/retweets)
|
||||
3. Approved, but not tweeted yet, skins
|
||||
4. Unreviwed skins
|
||||
5. Rejected skins
|
||||
6. NSFW skins
|
||||
*/
|
||||
"MUSEUM";
|
||||
|
||||
/** @gqlEnum */
|
||||
type SkinsFilterOption =
|
||||
/*
|
||||
Only the skins that have been approved for tweeting
|
||||
*/
|
||||
| "APPROVED"
|
||||
|
||||
/*
|
||||
Only the skins that have been rejected for tweeting
|
||||
*/
|
||||
| "REJECTED"
|
||||
|
||||
/*
|
||||
Only the skins that have been marked NSFW
|
||||
*/
|
||||
| "NSFW"
|
||||
|
||||
/*
|
||||
Only the skins that have been tweeted
|
||||
*/
|
||||
| "TWEETED";
|
||||
|
||||
/**
|
||||
* The current status of a pending upload.
|
||||
*
|
||||
|
|
@ -171,13 +84,13 @@ type SkinUploadStatus =
|
|||
/** The user has requested a URL, but the skin has not yet been processed. */
|
||||
| "URL_REQUESTED"
|
||||
/** The user has notified us that the skin has been uploaded, but we haven't yet
|
||||
processed it. */
|
||||
processed it. */
|
||||
| "UPLOAD_REPORTED"
|
||||
/** An error occured processing the skin. Usually this is a transient error, and
|
||||
the skin will be retried at a later time. */
|
||||
the skin will be retried at a later time. */
|
||||
| "ERRORED"
|
||||
/** An error occured processing the skin, but it was the fault of the server. It
|
||||
will be processed at a later date. */
|
||||
will be processed at a later date. */
|
||||
| "DELAYED"
|
||||
/** The skin has been successfully added to the Museum.
|
||||
* @deprecated
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { Ctx } from "..";
|
||||
import { Query } from "./RootResolver";
|
||||
import { Query } from "./QueryResolver";
|
||||
|
||||
/** @gqlType User */
|
||||
export default class UserResolver {
|
||||
|
|
|
|||
|
|
@ -22,15 +22,15 @@ import { screenshot_url as modernSkinScreenshot_urlResolver } from "./resolvers/
|
|||
import { tweeted as modernSkinTweetedResolver } from "./resolvers/CommonSkinResolver";
|
||||
import { tweets as modernSkinTweetsResolver } from "./resolvers/CommonSkinResolver";
|
||||
import { webamp_url as modernSkinWebamp_urlResolver } from "./resolvers/CommonSkinResolver";
|
||||
import { modern_skins as queryModern_skinsResolver } from "./resolvers/RootResolver";
|
||||
import { modern_skins as queryModern_skinsResolver } from "./ModernSkinsConnection";
|
||||
import { node as queryNodeResolver } from "./resolvers/NodeResolver";
|
||||
import { search_skins as querySearch_skinsResolver } from "./resolvers/SkinResolver";
|
||||
import { skin_to_review as querySkin_to_reviewResolver } from "./resolvers/SkinResolver";
|
||||
import { skins as querySkinsResolver } from "./resolvers/RootResolver";
|
||||
import { skins as querySkinsResolver } from "./SkinsConnection";
|
||||
import { statistics as queryStatisticsResolver } from "./resolvers/DatabaseStatisticsResolver";
|
||||
import { tweets as queryTweetsResolver } from "./TweetsConnection";
|
||||
import { upload_statuses as queryUpload_statusesResolver } from "./resolvers/RootResolver";
|
||||
import { upload_statuses_by_md5 as queryUpload_statuses_by_md5Resolver } from "./resolvers/RootResolver";
|
||||
import { upload_statuses as queryUpload_statusesResolver } from "./resolvers/SkinUpload";
|
||||
import { upload_statuses_by_md5 as queryUpload_statuses_by_md5Resolver } from "./resolvers/SkinUpload";
|
||||
import { approve_skin as mutationApprove_skinResolver } from "./resolvers/MutationResolver";
|
||||
import { mark_skin_nsfw as mutationMark_skin_nsfwResolver } from "./resolvers/MutationResolver";
|
||||
import { reject_skin as mutationReject_skinResolver } from "./resolvers/MutationResolver";
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { ISkin } from "../api/graphql/resolvers/CommonSkinResolver";
|
|||
import SkinResolver from "../api/graphql/resolvers/SkinResolver";
|
||||
import { Int } from "grats";
|
||||
import { Ctx } from "../api/graphql";
|
||||
import { Query } from "../api/graphql/resolvers/RootResolver";
|
||||
import { Query } from "../api/graphql/resolvers/QueryResolver";
|
||||
|
||||
export type ArchiveFileDebugData = {
|
||||
row: ArchiveFileRow;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { fetchMetadata, fetchTasks } from "../services/internetArchive";
|
|||
import { ISkin } from "../api/graphql/resolvers/CommonSkinResolver";
|
||||
import SkinResolver from "../api/graphql/resolvers/SkinResolver";
|
||||
import { Ctx } from "../api/graphql";
|
||||
import { Query } from "../api/graphql/resolvers/RootResolver";
|
||||
import { Query } from "../api/graphql/resolvers/QueryResolver";
|
||||
|
||||
const IA_URL = /^(https:\/\/)?archive.org\/details\/([^/]+)\/?/;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { Int } from "grats";
|
|||
import { ISkin } from "../api/graphql/resolvers/CommonSkinResolver";
|
||||
import SkinResolver from "../api/graphql/resolvers/SkinResolver";
|
||||
import { Ctx } from "../api/graphql";
|
||||
import { Query } from "../api/graphql/resolvers/RootResolver";
|
||||
import { Query } from "../api/graphql/resolvers/QueryResolver";
|
||||
|
||||
export type TweetDebugData = {
|
||||
row: TweetRow;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue