diff options
author | Devlin Junker <devlin.junker@gmail.com> | 2023-08-31 18:36:20 -0700 |
---|---|---|
committer | Benjamin Brahmer <info@b-brahmer.de> | 2023-09-03 12:05:24 +0200 |
commit | e2e8ae517afcb57bd2e0d5e6d4aacbb96603bd96 (patch) | |
tree | 51baf1eb5cf06ab0f5dd809cfd064f97db5f60eb /src | |
parent | 6111aca4af59ec167811ec594bf777d094c8fe2a (diff) |
move backend call details to services
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/dataservices/feed.service.ts | 39 | ||||
-rw-r--r-- | src/dataservices/folder.service.ts | 39 | ||||
-rw-r--r-- | src/store/feed.ts | 29 | ||||
-rw-r--r-- | src/store/folder.ts | 10 |
4 files changed, 91 insertions, 26 deletions
diff --git a/src/dataservices/feed.service.ts b/src/dataservices/feed.service.ts new file mode 100644 index 000000000..f5ac032b5 --- /dev/null +++ b/src/dataservices/feed.service.ts @@ -0,0 +1,39 @@ +import { AxiosResponse } from 'axios' +import axios from '@nextcloud/axios' + +import { API_ROUTES } from '../types/ApiRoutes' + +export class FeedService { + + /** + * Retrieves all Feed info from the Nextcloud News backend + * + * @return {AxiosResponse} Feed info stored in array property data.feeds + */ + static fetchAllFeeds(): Promise<AxiosResponse> { + return axios.get(API_ROUTES.FEED) + } + + /** + * Attempts to add a feed to the Nextcloud News backend + * NOTE: this can fail if feed URL is not resolvable + * + * @param param0 + * @param param0.url {String} url of the feed to add + * @param param0.folderId {number} id number of folder to add feed to + * @param param0.user {String} http auth username required for accessing feed + * @param param0.password {String} http auth password required for accessing feed + * @return {AxiosResponse} Feed info stored in data.feeds[0] property + */ + static addFeed({ url, folderId, user, password }: { url: string; folderId: number; user?: string; password?: string }): Promise<AxiosResponse> { + return axios.post(API_ROUTES.FEED, { + url, + parentFolderId: folderId, + title: null, // TODO: let user define feed title on create? + user: user || null, + password: password || null, + fullDiscover: undefined, // TODO: autodiscover? + }) + } + +} diff --git a/src/dataservices/folder.service.ts b/src/dataservices/folder.service.ts new file mode 100644 index 000000000..45db7d271 --- /dev/null +++ b/src/dataservices/folder.service.ts @@ -0,0 +1,39 @@ +import { AxiosResponse } from 'axios' +import axios from '@nextcloud/axios' + +import { API_ROUTES } from '../types/ApiRoutes' + +export class FolderService { + + /** + * Retrieves all of the folders from the Nextcloud News backend + * + * @return {AxiosResponse} Folders contained in data.folders property + */ + static fetchAllFolders(): Promise<AxiosResponse> { + return axios.get(API_ROUTES.FOLDER) + } + + /** + * Creates a new Folder in the Nextcloud News backend + * + * @param param0 + * @param param0.name {String} New Folder Name + * @return {AxiosResponse} Folder info from backend in data.folders[0] property + */ + static createFolder({ name }: { name: string }): Promise<AxiosResponse> { + return axios.post(API_ROUTES.FOLDER, { folderName: name }) + } + + /** + * Deletes a folder in the Nextcloud News backend (by id number) + * + * @param param0 + * @param param0.id {number} id of folder to delete + * @return {AxiosResponse} + */ + static deleteFolder({ id }: { id: number }): Promise<AxiosResponse> { + return axios.delete(API_ROUTES.FOLDER + '/' + id) + } + +} diff --git a/src/store/feed.ts b/src/store/feed.ts index d86604266..b66fff376 100644 --- a/src/store/feed.ts +++ b/src/store/feed.ts @@ -1,9 +1,8 @@ -import axios from '@nextcloud/axios' - import { ActionParams, AppState } from '../store' import { Feed } from '../types/Feed' -import { API_ROUTES } from '../types/ApiRoutes' import { FOLDER_MUTATION_TYPES, FEED_MUTATION_TYPES, FEED_ITEM_MUTATION_TYPES } from '../types/MutationTypes' +import { FolderService } from '../dataservices/folder.service' +import { FeedService } from '../dataservices/feed.service' export const FEED_ACTION_TYPES = { ADD_FEED: 'ADD_FEED', @@ -22,7 +21,7 @@ const getters = { export const actions = { async [FEED_ACTION_TYPES.FETCH_FEEDS]({ commit }: ActionParams) { - const feeds = await axios.get(API_ROUTES.FEED) + const feeds = await FeedService.fetchAllFeeds() commit(FEED_MUTATION_TYPES.SET_FEEDS, feeds.data.feeds) commit(FEED_ITEM_MUTATION_TYPES.SET_UNREAD_COUNT, (feeds.data.feeds.reduce((total: number, feed: Feed) => { @@ -47,30 +46,20 @@ export const actions = { let folderId if (feedReq.folder?.id === undefined && feedReq.folder?.name && feedReq.folder?.name !== '') { - const response = await axios.post(API_ROUTES.FOLDER, { folderName: feedReq.folder?.name }) + const response = await FolderService.createFolder({ name: feedReq.folder.name }) folderId = response.data.folders[0].id commit(FOLDER_MUTATION_TYPES.SET_FOLDERS, response.data.folders) } else { folderId = feedReq.folder?.id || 0 } - const feed: Feed = { - url, - folderId, - title: undefined, // TODO: let user define feed title on create? - unreadCount: 0, - autoDiscover: undefined, // TODO: autodiscover? - } - // Check that url is resolvable try { - const response = await axios.post(API_ROUTES.FEED, { - url: feed.url, - parentFolderId: feed.folderId, - title: null, - user: feedReq.user ? feedReq.user : null, - password: feedReq.password ? feedReq.password : null, - fullDiscover: feed.autoDiscover, + const response = await FeedService.addFeed({ + url, + folderId, + user: feedReq.user, + password: feedReq.password, }) commit(FEED_MUTATION_TYPES.ADD_FEED, response.data.feeds[0]) diff --git a/src/store/folder.ts b/src/store/folder.ts index bf8bc0922..760ff39c6 100644 --- a/src/store/folder.ts +++ b/src/store/folder.ts @@ -1,10 +1,8 @@ -import axios from '@nextcloud/axios' - import { AppState, ActionParams } from '../store' import { Folder } from '../types/Folder' import { Feed } from '../types/Feed' import { FOLDER_MUTATION_TYPES, FEED_MUTATION_TYPES } from '../types/MutationTypes' -import { API_ROUTES } from '../types/ApiRoutes' +import { FolderService } from '../dataservices/folder.service' export const FOLDER_ACTION_TYPES = { FETCH_FOLDERS: 'FETCH_FOLDERS', @@ -24,12 +22,12 @@ const getters = { export const actions = { async [FOLDER_ACTION_TYPES.FETCH_FOLDERS]({ commit }: ActionParams) { - const folders = await axios.get(API_ROUTES.FOLDER) + const folders = await FolderService.fetchAllFolders() commit(FOLDER_MUTATION_TYPES.SET_FOLDERS, folders.data.folders) }, async [FOLDER_ACTION_TYPES.ADD_FOLDERS]({ commit }: ActionParams, { folder }: { folder: Folder}) { - const response = await axios.post(API_ROUTES.FOLDER, { folderName: folder.name }) + const response = await FolderService.createFolder({ name: folder.name }) commit(FOLDER_MUTATION_TYPES.SET_FOLDERS, response.data.folders) }, async [FOLDER_ACTION_TYPES.DELETE_FOLDER]({ commit }: ActionParams, { folder }: { folder: Folder}) { @@ -39,7 +37,7 @@ export const actions = { promises.push(self.reversiblyDelete(feed.id, false, true)); }); */ - await axios.delete(API_ROUTES.FOLDER + '/' + folder.id) + await FolderService.deleteFolder({ id: folder.id }) commit(FOLDER_MUTATION_TYPES.DELETE_FOLDER, folder) }, } |