sozsoft-platform/ui/src/services/intranet.service.ts
2026-05-08 21:11:56 +03:00

129 lines
3.5 KiB
TypeScript

import { EventCommentDto, EventDto, IntranetDashboardDto, SocialCommentDto, SocialPostDto } from '@/proxy/intranet/models'
import apiService, { Config } from './api.service'
export interface CreateSocialPostInput {
content: string
locationJson?: string
media?: {
type: 'image' | 'video' | 'poll'
urls?: string[]
pollQuestion?: string
pollOptions?: { text: string }[]
}
}
export class IntranetService {
apiName = 'Default'
getDashboard = (config?: Partial<Config>) =>
apiService.fetchData<IntranetDashboardDto>(
{
method: 'GET',
url: '/api/app/intranet/intranet-dashboard',
},
{ apiName: this.apiName, ...config },
)
createSurveyResponse = (
surveyId: string,
answers: { questionId: string; questionType: string; value: string }[],
config?: Partial<Config>,
) =>
apiService.fetchData<void>(
{
method: 'POST',
url: '/api/app/intranet/survey-response',
data: { surveyId, answers },
},
{ apiName: this.apiName, ...config },
)
createSocialPost = (input: CreateSocialPostInput, config?: Partial<Config>) =>
apiService.fetchData<SocialPostDto, CreateSocialPostInput>(
{
method: 'POST',
url: '/api/app/intranet/social-post',
data: input,
},
{ apiName: this.apiName, ...config },
)
deleteSocialPost = (id: string, config?: Partial<Config>) =>
apiService.fetchData<void>(
{
method: 'DELETE',
url: `/api/app/intranet/${id}/social-post`,
},
{ apiName: this.apiName, ...config },
)
likeSocialPost = (id: string, config?: Partial<Config>) =>
apiService.fetchData<SocialPostDto>(
{
method: 'POST',
url: `/api/app/intranet/like-social-post`,
params: { id },
},
{ apiName: this.apiName, ...config },
)
commentSocialPost = (id: string, content: string, config?: Partial<Config>) =>
apiService.fetchData<SocialCommentDto>(
{
method: 'POST',
url: `/api/app/intranet/comment-social-post`,
params: { id, content },
},
{ apiName: this.apiName, ...config },
)
voteSocialPoll = (postId: string, optionId: string, config?: Partial<Config>) =>
apiService.fetchData<void>(
{
method: 'POST',
url: `/api/app/intranet/vote-social-poll`,
params: { postId, optionId },
},
{ apiName: this.apiName, ...config },
)
incrementAnnouncementViewCount = (id: string, config?: Partial<Config>) =>
apiService.fetchData<void>(
{
method: 'POST',
url: `/api/app/intranet/${id}/announcement-view`,
},
{ apiName: this.apiName, ...config },
)
getEventComments = (eventId: string, config?: Partial<Config>) =>
apiService.fetchData<EventCommentDto[]>(
{
method: 'GET',
url: `/api/app/intranet/event-comments/${eventId}`,
},
{ apiName: this.apiName, ...config },
)
createEventComment = (eventId: string, content: string, config?: Partial<Config>) =>
apiService.fetchData<EventCommentDto>(
{
method: 'POST',
url: `/api/app/intranet/event-comment/${eventId}`,
params: { content },
},
{ apiName: this.apiName, ...config },
)
likeEvent = (id: string, config?: Partial<Config>) =>
apiService.fetchData<EventDto>(
{
method: 'POST',
url: `/api/app/intranet/like-event`,
params: { id },
},
{ apiName: this.apiName, ...config },
)
}
export const intranetService = new IntranetService()