Handling the progress sent from the frontend to the controller.

This commit is contained in:
krzysiej
2022-06-08 13:09:54 +02:00
parent 4b22850ac9
commit b1fa15b6f4
7 changed files with 82 additions and 14 deletions

View File

@@ -34,8 +34,6 @@ export default {
created() { created() {
window.EventBus.$on('updateProgress', (data) => { window.EventBus.$on('updateProgress', (data) => {
this.newProgress = data.readPages; this.newProgress = data.readPages;
console.info(this.newProgress);
console.info(this.progress);
}); });
}, },
methods: {} methods: {}

View File

@@ -5,13 +5,14 @@
</span> </span>
<span v-show="editmode"> <span v-show="editmode">
<input type="number" @keydown.esc="cancelEdit" @keydown.enter="submit" ref="readPagesInput" min="0" <input type="number" @keydown.esc="cancelEdit" @keydown.enter="submit" ref="readPagesInput" min="0"
:max="totalPages" v-model.number="newProgress" /> :max="totalPages" v-model.number="newProgress"/>
</span> </span>
</div> </div>
</template> </template>
<script> <script>
import {EventBus} from "../event-bus"; import {EventBus} from "../event-bus";
import axios from "axios";
export default { export default {
name: 'Progresseditor', name: 'Progresseditor',
@@ -20,7 +21,8 @@ export default {
}, },
props: { props: {
totalPages: Number, totalPages: Number,
readPages: Number readPages: Number,
bookId: Number
}, },
data() { data() {
return { return {
@@ -48,7 +50,16 @@ export default {
}, },
submit: function () { submit: function () {
this.editmode = false; this.editmode = false;
axios.post('/progress/update', {
bookId: this.bookId,
progress: this.newProgress
}, {
headers: {
'content-type': 'text/json'
}
}).then(() => {
window.EventBus.$emit('updateProgress', {readPages: this.newProgress}); window.EventBus.$emit('updateProgress', {readPages: this.newProgress});
})
} }
} }
} }

View File

@@ -8,7 +8,7 @@ use App\Form\BookType;
use App\Form\FileType; use App\Form\FileType;
use App\Form\SearchType; use App\Form\SearchType;
use App\Repository\BookRepository; use App\Repository\BookRepository;
use App\Service\FileService; use App\Service\ProgressService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
@@ -29,7 +29,7 @@ class BookController extends AbstractController
} }
#[Route('/new', name: 'app_book_new', methods: ['GET', 'POST'])] #[Route('/new', name: 'app_book_new', methods: ['GET', 'POST'])]
public function new(Request $request, BookRepository $bookRepository, FileService $fileService): Response public function new(Request $request, BookRepository $bookRepository, ProgressService $fileService): Response
{ {
$book = new Book(); $book = new Book();
$form = $this->createForm(BookType::class, $book); $form = $this->createForm(BookType::class, $book);
@@ -95,7 +95,7 @@ class BookController extends AbstractController
public function show( public function show(
Book $book, Book $book,
Request $request, Request $request,
FileService $fileService ProgressService $fileService
): Response { ): Response {
$fileForm = $this->createForm(FileType::class); $fileForm = $this->createForm(FileType::class);
$fileForm->handleRequest($request); $fileForm->handleRequest($request);
@@ -124,7 +124,7 @@ class BookController extends AbstractController
Request $request, Request $request,
Book $book, Book $book,
BookRepository $bookRepository, BookRepository $bookRepository,
FileService $fileService ProgressService $fileService
): Response { ): Response {
$form = $this->createForm(BookType::class, $book); $form = $this->createForm(BookType::class, $book);
$form->handleRequest($request); $form->handleRequest($request);
@@ -162,7 +162,7 @@ class BookController extends AbstractController
Request $request, Request $request,
Book $book, Book $book,
BookRepository $bookRepository, BookRepository $bookRepository,
FileService $fileService ProgressService $fileService
): Response { ): Response {
if ($this->isCsrfTokenValid('delete' . $book->getId(), $request->request->get('_token'))) { if ($this->isCsrfTokenValid('delete' . $book->getId(), $request->request->get('_token'))) {
$fileService->removeFiles($book->getFiles()); $fileService->removeFiles($book->getFiles());

View File

@@ -2,13 +2,10 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\Book;
use App\Entity\File; use App\Entity\File;
use App\Repository\FileRepository; use App\Repository\FileRepository;
use App\Service\FileService; use App\Service\FileService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Controller;
use App\Service\ProgressService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/progress')]
class ProgressController extends AbstractController
{
#[Route('/update', name: 'app_progress_update', methods: ['POST'])]
public function index(Request $request, ProgressService $progressService): JsonResponse
{
$data = $request->toArray();
$progress = $progressService->updateProgress($data['bookId'], $data['progress']);
return $this->json([
'bookId' => $progress->getBook()->getId(),
'progress' => $progress->getPages(),
]);
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Service;
use App\Entity\Progress;
use App\Repository\BookRepository;
use App\Repository\ProgressRepository;
class ProgressService
{
private ProgressRepository $progressRepository;
private BookRepository $bookRepository;
public function __construct(ProgressRepository $progressRepository, BookRepository $bookRepository)
{
$this->progressRepository = $progressRepository;
$this->bookRepository = $bookRepository;
}
public function updateProgress(int $bookId, int $progressPages): Progress
{
/** @var Progress $progress */
$progress = $this->progressRepository->findOneBy(['book' => $bookId, 'date' => date_create()]);
if (!$progress) {
$progress = new Progress();
$progress->setBook($this->bookRepository->find($bookId));
$progress->setDate(date_create());
}
$progress->setPages($progressPages);
$this->progressRepository->add($progress, true);
return $progress;
}
}

View File

@@ -56,7 +56,11 @@
{% endif %} {% endif %}
<tr> <tr>
<th>Progress</th> <th>Progress</th>
<td><progresseditor :read-pages="{{ progress_pages }}" :total-pages="{{ book.pages }}"></progresseditor></td> <td>
<progresseditor :book-id="{{ book.id }}"
:read-pages="{{ progress_pages }}"
:total-pages="{{ book.pages }}"></progresseditor>
</td>
<th>Pages</th> <th>Pages</th>
<td>{{ book.pages }}</td> <td>{{ book.pages }}</td>
</tr> </tr>