Skip to content

Commit

Permalink
Merge branch 'main' of github.com:SShlykov/zeitment
Browse files Browse the repository at this point in the history
  • Loading branch information
SShlykov committed Mar 15, 2024
2 parents 1a0a7be + 855339c commit 794700e
Show file tree
Hide file tree
Showing 70 changed files with 2,366 additions and 290 deletions.
1 change: 1 addition & 0 deletions books-ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<link rel="icon" type="image/svg+xml" href="icons/logo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/css/remixicons/remixicon.css">
<link rel="stylesheet" href="/css/animations.css">
<link rel="stylesheet" href="/css/fonts.css">
<link rel="stylesheet" href="/css/global.css">
<title>Books</title>
Expand Down
16 changes: 16 additions & 0 deletions books-ui/public/css/animations.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.appearFromTop {
animation: appearFromTop 1s forwards;
}

.appearFromTop-3 {
animation: appearFromTop 0.3s forwards;
}

@keyframes appearFromTop {
from {
transform: translateY(-100px);
}
to {
transform: translateY(0);
}
}
5 changes: 4 additions & 1 deletion books-ui/src/App.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script>
import Head from '@frames/Head.vue';
import SideMenu from '@frames/SideMenu/SideMenu.vue';
import AppNotifications from "@frames/AppNotifications/AppNotifications.vue";
import {mapGetters} from "vuex";
import AdapterOfBooks from "@adapters/AdapterOfBooks.js";
import ServiceOfBooks from "@services/ServiceOfBooks.js";
Expand All @@ -11,12 +12,14 @@ export default {
components: {
Head,
SideMenu,
AppNotifications
},
data() {
return {}
},
computed: {
...mapGetters('books', ['userBooks']),
...mapGetters('layout', ['notifications']),
pageName() {
if (!this.$route) return "pending"
return this.$route.name
Expand All @@ -29,7 +32,6 @@ export default {
const serviceOfBooks = new ServiceOfBooks(adapterOfBooks, store)
serviceOfBooks.fetchUserBooks()
},
}
</script>
Expand All @@ -53,4 +55,5 @@ export default {
>
<router-view />
</div>
<AppNotifications :notifications="notifications" />
</template>
6 changes: 3 additions & 3 deletions books-ui/src/adapters/AdapterOfBooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,19 @@ class AdapterOfBooks {
this.url = url
}


/**
*
* @returns {Promise<Object[]>}
* @param {Object | undefined} params
* @returns {Promise<Object[]|*[]>}
*/
async getBooks(params) {
const defaultParams = {
"page_size": 10,
"page": 1
}
const {page, page_size} = fetchParamsByDefaultObject(params, defaultParams)
console.log(params)
if (!is(Number, page) || !is(Number, page_size) || page < 0 || page_size < 0) return []
console.log(`${this.url}/books/list`)
let {data: books} = await post(`${this.url}/books/list`, {
"options": {page, page_size}
})
Expand Down
160 changes: 160 additions & 0 deletions books-ui/src/adapters/AdapterOfChapters.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
import {get, post, put, remove} from '@helpers/apiHelpers.js'
import {convertList, convertObject} from '@helpers/adapter/adapter.js'
import {fetchParamsByDefaultObject, reverseObject} from '@helpers/objectUtils'
import {is} from "ramda";

const adapterConfig = {
"id": "id",
"created_at": "createdAt",
"updated_at": "updatedAt",
"deleted_at": "deletedAt",
"title": "title",
"number": "number",
"text": "text",
"book_id": "bookId",
"is_public": "isPublic",
"map_link": "mapLink",
"map_params_id": "mapParamsId"
}


/**
* ChaptersApi class
*
* @class
*/

class AdapterOfChapters {

/**
*
* @param {String} url
*/
constructor(url) {
this.adapterFromApiConfig = adapterConfig
this.adapterToApiConfig = reverseObject(this.adapterFromApiConfig)
this.url = url
}


/**
*
* @param {Object | undefined} params
* @returns {Promise<Object[]|*[]>}
*/
async getChapters(params) {
const defaultParams = {
"page_size": 10,
"page": 1
}
const {page, page_size} = fetchParamsByDefaultObject(params, defaultParams)
if (!is(Number, page) || !is(Number, page_size) || page < 0 || page_size < 0) return []
let {data: books} = await post(`${this.url}/chapters/list`, {
"options": {page, page_size}
})
books = convertList(books, {config: this.adapterFromApiConfig})
return books
}

/**
*
* @param {String} bookId
* @param {Object | undefined} params
* @returns {Promise<Object[]>}
*/
async getChaptersByBookId(bookId, params) {
const defaultParams = {
"page_size": 10,
"page": 1
}
const {page, page_size} = fetchParamsByDefaultObject(params, defaultParams)
if (!is(Number, page) || !is(Number, page_size) || page < 0 || page_size < 0) return []
const {data: chapters} = await post(`${this.url}/chapters/book/${bookId}`, {
"options": {page, page_size}
})
return convertList(chapters, {config: this.adapterFromApiConfig})
}

/**
*
* @param {Object} book
* @returns {Promise<*|void|Object>}
*/
async updateChapter(book) {
const chapterToApi = convertObject(book, {config: this.adapterToApiConfig})
const {data: chapterFromApi} = await put(`${this.url}/chapters/${book.id}`, {
chapter: chapterToApi
})

const updatedChapter = convertObject(chapterFromApi, {config: this.adapterFromApiConfig})
return updatedChapter
}

/**
*
* @param {Object} chapter
* @returns {Promise<*|void|Object>}
*/
async createChapter(chapter) {
const chapterToApi = convertObject(chapter, {config: this.adapterToApiConfig})
const {data: chapterFromApi} = await post(`${this.url}/chapters`, {
chapter: chapterToApi
})
const createdChapter = convertObject(chapterFromApi, {config: this.adapterFromApiConfig})
return createdChapter
}


/**
*
* @param {Number} id
* @returns {Promise<Object>}
*/
async getChapterById(id) {
const {data: chapter} = await get(`${this.url}/chapters/${id}`)
return convertObject(chapter, {config: this.adapterFromApiConfig})
}

/**
*
* @param {Number} id
* @returns {Promise<Object>}
*/
async deleteChapterById(id) {
const {data: chapter} = await remove(`${this.url}/chapters/${id}`)
const updatedChapter = convertObject(chapter, {config: this.adapterFromApiConfig})
return updatedChapter
}

/**
* @param {Function} logFunction
* @returns {Promise<null>}
*/
async integrationTests(logFunction) {
logFunction("Список глав")
const books = await this.getChapters()
logFunction(books)
logFunction("Список глав по книге")
const chaptersByBook = await this.getChaptersByBookId("fb5e7d1d-38cd-4831-bae9-07b36080e3e7")
logFunction("Создание главы")
const newChapter = await this.createChapter({
"title": "Chapter 1",
"number": 1,
"text": "tests",
"bookId": "fb5e7d1d-38cd-4831-bae9-07b36080e3e7",
"isPublic": false
})
logFunction(newChapter)
logFunction("Получение главы по id(Созданной)")
const bookById = await this.getChapterById(newChapter.id)
logFunction(bookById)
logFunction("Обновление главы")
const updatedChapter = await this.updateChapter({...bookById, title: "Обновленная глава"})
logFunction(updatedChapter)
logFunction("Удаление главы")
const deletedChapter = await this.deleteChapterById(bookById.id)
logFunction(deletedChapter)
}
}

export default AdapterOfChapters
Loading

0 comments on commit 794700e

Please sign in to comment.