mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Implement subscribe api
This commit is contained in:
parent
1da8b75c81
commit
4699458457
1 changed files with 66 additions and 7 deletions
|
|
@ -1,9 +1,13 @@
|
|||
import { authorized } from '../../utils/helpers'
|
||||
import {
|
||||
MutationSubscribeArgs,
|
||||
MutationUnsubscribeArgs,
|
||||
QuerySubscriptionsArgs,
|
||||
SortBy,
|
||||
SortOrder,
|
||||
SubscribeError,
|
||||
SubscribeErrorCode,
|
||||
SubscribeSuccess,
|
||||
SubscriptionsError,
|
||||
SubscriptionsErrorCode,
|
||||
SubscriptionsSuccess,
|
||||
|
|
@ -17,7 +21,8 @@ import { env } from '../../env'
|
|||
import { getRepository } from '../../entity/utils'
|
||||
import { User } from '../../entity/user'
|
||||
import { Subscription } from '../../entity/subscription'
|
||||
import { unsubscribe } from '../../services/subscriptions'
|
||||
import { getSubscribeHandler, unsubscribe } from '../../services/subscriptions'
|
||||
import { ILike } from 'typeorm'
|
||||
|
||||
export const subscriptionsResolver = authorized<
|
||||
SubscriptionsSuccess,
|
||||
|
|
@ -87,12 +92,6 @@ export const unsubscribeResolver = authorized<
|
|||
}
|
||||
}
|
||||
|
||||
if (subscription.user.id !== uid) {
|
||||
return {
|
||||
errorCodes: [UnsubscribeErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
// if subscription is already unsubscribed, throw error
|
||||
if (subscription.status === SubscriptionStatus.Unsubscribed) {
|
||||
return {
|
||||
|
|
@ -125,3 +124,63 @@ export const unsubscribeResolver = authorized<
|
|||
}
|
||||
}
|
||||
})
|
||||
|
||||
export const subscribeResolver = authorized<
|
||||
SubscribeSuccess,
|
||||
SubscribeError,
|
||||
MutationSubscribeArgs
|
||||
>(async (_, { name }, { claims: { uid }, log }) => {
|
||||
log.info('subscribeResolver')
|
||||
|
||||
try {
|
||||
const user = await getRepository(User).findOneBy({ id: uid })
|
||||
if (!user) {
|
||||
return {
|
||||
errorCodes: [SubscribeErrorCode.Unauthorized],
|
||||
}
|
||||
}
|
||||
|
||||
const subscription = await getRepository(Subscription).findOneBy({
|
||||
name: ILike(name),
|
||||
user: { id: uid },
|
||||
status: SubscriptionStatus.Active,
|
||||
})
|
||||
if (subscription) {
|
||||
return {
|
||||
errorCodes: [SubscribeErrorCode.AlreadySubscribed],
|
||||
}
|
||||
}
|
||||
|
||||
const subscribeHandler = getSubscribeHandler(name)
|
||||
if (!subscribeHandler) {
|
||||
return {
|
||||
errorCodes: [SubscribeErrorCode.NotFound],
|
||||
}
|
||||
}
|
||||
|
||||
const newSubscriptions = await subscribeHandler.handleSubscribe(uid, name)
|
||||
if (!newSubscriptions) {
|
||||
return {
|
||||
errorCodes: [SubscribeErrorCode.BadRequest],
|
||||
}
|
||||
}
|
||||
|
||||
analytics.track({
|
||||
userId: uid,
|
||||
event: 'subscribed',
|
||||
properties: {
|
||||
name,
|
||||
env: env.server.apiEnv,
|
||||
},
|
||||
})
|
||||
|
||||
return {
|
||||
subscriptions: newSubscriptions,
|
||||
}
|
||||
} catch (error) {
|
||||
log.error('failed to subscribe', error)
|
||||
return {
|
||||
errorCodes: [SubscribeErrorCode.BadRequest],
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue