docs: add JSDoc to service public methods
One-line JSDoc on 82 methods across 11 service files for quick scanning without reading full implementations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ export interface FeatureFlagContext {
|
||||
}
|
||||
|
||||
export const featureFlagsService = {
|
||||
/** Check whether a feature flag is enabled globally. */
|
||||
isFlagEnabled: async (flagName: string): Promise<boolean> => {
|
||||
const flag = await DrizzleClient.query.featureFlags.findFirst({
|
||||
where: eq(featureFlags.name, flagName),
|
||||
@@ -17,6 +18,7 @@ export const featureFlagsService = {
|
||||
return flag?.enabled ?? false;
|
||||
},
|
||||
|
||||
/** Check if a guild/user/role has access to a feature flag; returns false if flag is disabled. */
|
||||
hasAccess: async (
|
||||
flagName: string,
|
||||
context: FeatureFlagContext
|
||||
@@ -51,6 +53,7 @@ export const featureFlagsService = {
|
||||
return false;
|
||||
},
|
||||
|
||||
/** Create a new feature flag, disabled by default. */
|
||||
createFlag: async (name: string, description?: string) => {
|
||||
const [flag] = await DrizzleClient.insert(featureFlags).values({
|
||||
name,
|
||||
@@ -60,6 +63,7 @@ export const featureFlagsService = {
|
||||
return flag;
|
||||
},
|
||||
|
||||
/** Enable or disable a feature flag by name; throws if the flag does not exist. */
|
||||
setFlagEnabled: async (name: string, enabled: boolean) => {
|
||||
const [flag] = await DrizzleClient.update(featureFlags)
|
||||
.set({ enabled, updatedAt: new Date() })
|
||||
@@ -72,6 +76,7 @@ export const featureFlagsService = {
|
||||
return flag;
|
||||
},
|
||||
|
||||
/** Grant a guild, user, or role access to a feature flag. */
|
||||
grantAccess: async (
|
||||
flagName: string,
|
||||
access: { guildId?: string; userId?: string; roleId?: string }
|
||||
@@ -90,6 +95,7 @@ export const featureFlagsService = {
|
||||
return accessRecord;
|
||||
},
|
||||
|
||||
/** Revoke a specific access record by ID; throws if not found. */
|
||||
revokeAccess: async (accessId: number) => {
|
||||
const [access] = await DrizzleClient.delete(featureFlagAccess)
|
||||
.where(eq(featureFlagAccess.id, accessId))
|
||||
@@ -101,18 +107,21 @@ export const featureFlagsService = {
|
||||
return access;
|
||||
},
|
||||
|
||||
/** Retrieve a single feature flag by name. */
|
||||
getFlag: async (name: string) => {
|
||||
return await DrizzleClient.query.featureFlags.findFirst({
|
||||
where: eq(featureFlags.name, name),
|
||||
});
|
||||
},
|
||||
|
||||
/** List all feature flags, ordered by name. */
|
||||
listFlags: async () => {
|
||||
return await DrizzleClient.query.featureFlags.findMany({
|
||||
orderBy: (flags, { asc }) => [asc(flags.name)],
|
||||
});
|
||||
},
|
||||
|
||||
/** List all access records for a given feature flag. */
|
||||
listAccess: async (flagName: string) => {
|
||||
const flag = await DrizzleClient.query.featureFlags.findFirst({
|
||||
where: eq(featureFlags.name, flagName),
|
||||
@@ -125,6 +134,7 @@ export const featureFlagsService = {
|
||||
});
|
||||
},
|
||||
|
||||
/** Delete a feature flag and its associated access records; throws if not found. */
|
||||
deleteFlag: async (name: string) => {
|
||||
const [flag] = await DrizzleClient.delete(featureFlags)
|
||||
.where(eq(featureFlags.name, name))
|
||||
|
||||
Reference in New Issue
Block a user