summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDevlin Junker <devlin.junker@gmail.com>2023-08-31 18:36:20 -0700
committerBenjamin Brahmer <info@b-brahmer.de>2023-09-03 12:05:24 +0200
commite2e8ae517afcb57bd2e0d5e6d4aacbb96603bd96 (patch)
tree51baf1eb5cf06ab0f5dd809cfd064f97db5f60eb /src
parent6111aca4af59ec167811ec594bf777d094c8fe2a (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.ts39
-rw-r--r--src/dataservices/folder.service.ts39
-rw-r--r--src/store/feed.ts29
-rw-r--r--src/store/folder.ts10
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)
},
}