Add FeaturePost support (#88)

* Add FeaturePost support

* Make featured not optional
This commit is contained in:
Anon 2022-12-11 09:20:01 -06:00 committed by GitHub
parent a4ed93ae16
commit 60c5c85cd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 44 additions and 29 deletions

View file

@ -90,6 +90,7 @@ import {
CreatePostReport,
DeletePost,
EditPost,
FeaturePost,
GetPost,
GetPostResponse,
GetPosts,
@ -105,7 +106,6 @@ import {
RemovePost,
ResolvePostReport,
SavePost,
StickyPost,
} from "./interfaces/api/post";
import {
ApproveRegistrationApplication,
@ -441,12 +441,12 @@ export class LemmyHttp {
}
/**
* A moderator can sticky a post ( IE stick it to the top of a community ).
* A moderator can feature a community post ( IE stick it to the top of a community ).
*
* `HTTP.POST /post/sticky`
* `HTTP.POST /post/feature`
*/
async stickyPost(form: StickyPost) {
return this.wrapper(HttpType.Post, "/post/sticky", form, PostResponse);
async featurePost(form: FeaturePost) {
return this.wrapper(HttpType.Post, "/post/feature", form, PostResponse);
}
/**

View file

@ -53,6 +53,8 @@ export interface PostAggregates {
*/
newest_comment_time_necro: string;
newest_comment_time: string;
featured_community: boolean;
featured_local: boolean;
}
/**

View file

@ -2,7 +2,12 @@ import { Option } from "@sniptt/monads";
import { Expose, Transform, Type } from "class-transformer";
import "reflect-metadata";
import { toOption, toUndefined } from "../../utils";
import { ListingType, SiteMetadata, SortType } from "../others";
import {
ListingType,
PostFeatureType,
SiteMetadata,
SortType,
} from "../others";
import {
CommunityModeratorView,
CommunityView,
@ -218,14 +223,15 @@ export class LockPost {
}
/**
* Only admins and mods can sticky a post.
* Only admins and mods can feature a community post.
*/
export class StickyPost {
export class FeaturePost {
post_id: number;
stickied: boolean;
featured: boolean;
feature_type: PostFeatureType;
auth: string;
constructor(init: StickyPost) {
constructor(init: FeaturePost) {
Object.assign(this, init);
}
}

View file

@ -19,11 +19,11 @@ import {
ModAddView,
ModBanFromCommunityView,
ModBanView,
ModFeaturePostView,
ModLockPostView,
ModRemoveCommentView,
ModRemoveCommunityView,
ModRemovePostView,
ModStickyPostView,
ModTransferCommunityView,
PersonBlockView,
PersonViewSafe,
@ -133,8 +133,8 @@ export class GetModlogResponse {
removed_posts: ModRemovePostView[];
@Type(() => ModLockPostView)
locked_posts: ModLockPostView[];
@Type(() => ModStickyPostView)
stickied_posts: ModStickyPostView[];
@Type(() => ModFeaturePostView)
featured_posts: ModFeaturePostView[];
@Type(() => ModRemoveCommentView)
removed_comments: ModRemoveCommentView[];
@Type(() => ModRemoveCommunityView)

View file

@ -27,7 +27,7 @@ export enum UserOperation {
DeletePost,
RemovePost,
LockPost,
StickyPost,
FeaturePost,
MarkPostAsRead,
SavePost,
EditCommunity,
@ -192,7 +192,7 @@ export enum ModlogActionType {
All = "All",
ModRemovePost = "ModRemovePost",
ModLockPost = "ModLockPost",
ModStickyPost = "ModStickyPost",
ModFeaturePost = "ModFeaturePost",
ModRemoveComment = "ModRemoveComment",
ModRemoveCommunity = "ModRemoveCommunity",
ModBanFromCommunity = "ModBanFromCommunity",
@ -216,6 +216,14 @@ export enum SubscribedType {
Pending = "Pending",
}
/**
* Different Subscribed states
*/
export enum PostFeatureType {
Local = "Local",
Community = "Community",
}
/**
* A holder for a site's metadata ( such as opengraph tags ), used for post links.
*/

View file

@ -229,7 +229,6 @@ export class Post {
updated: Option<string>;
deleted: boolean;
nsfw: boolean;
stickied: boolean;
@Transform(({ value }) => toOption(value), { toClassOnly: true })
@Transform(({ value }) => toUndefined(value), { toPlainOnly: true })
@Expose()
@ -249,6 +248,8 @@ export class Post {
ap_id: string;
local: boolean;
language_id: number;
featured_community: boolean;
featured_local: boolean;
}
export class PasswordResetRequest {
@ -284,14 +285,12 @@ export class ModLockPost {
when_: string;
}
export class ModStickyPost {
export class ModFeaturePost {
id: number;
mod_person_id: number;
post_id: number;
@Transform(({ value }) => toOption(value), { toClassOnly: true })
@Transform(({ value }) => toUndefined(value), { toPlainOnly: true })
@Expose()
stickied: Option<boolean>;
featured: boolean;
is_featured_community: boolean;
when_: string;
}

View file

@ -26,11 +26,11 @@ import {
ModAddCommunity,
ModBan,
ModBanFromCommunity,
ModFeaturePost,
ModLockPost,
ModRemoveComment,
ModRemoveCommunity,
ModRemovePost,
ModStickyPost,
ModTransferCommunity,
PersonMention,
PersonSafe,
@ -342,9 +342,9 @@ export class ModRemovePostView {
community: CommunitySafe;
}
export class ModStickyPostView {
@Type(() => ModStickyPost)
mod_sticky_post: ModStickyPost;
export class ModFeaturePostView {
@Type(() => ModFeaturePost)
mod_feature_post: ModFeaturePost;
@Transform(({ value }) => toOption(value), { toClassOnly: true })
@Transform(({ value }) => toUndefined(value), { toPlainOnly: true })
@Expose()

View file

@ -60,6 +60,7 @@ import {
CreatePostReport,
DeletePost,
EditPost,
FeaturePost,
GetPost,
GetPosts,
GetSiteMetadata,
@ -69,7 +70,6 @@ import {
RemovePost,
ResolvePostReport,
SavePost,
StickyPost,
} from "./interfaces/api/post";
import {
ApproveRegistrationApplication,
@ -333,10 +333,10 @@ export class LemmyWebsocket {
}
/**
* A moderator can sticky a post ( IE stick it to the top of a community ).
* A moderator can feature a post ( IE stick it to the top of a community ).
*/
stickyPost(form: StickyPost) {
return wrapper(UserOperation.StickyPost, form);
featurePost(form: FeaturePost) {
return wrapper(UserOperation.FeaturePost, form);
}
/**