Handling the progress sent from the frontend to the controller.
This commit is contained in:
@@ -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: {}
|
||||||
|
|||||||
@@ -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});
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
24
src/Controller/ProgressController.php
Normal file
24
src/Controller/ProgressController.php
Normal 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(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
34
src/Service/ProgressService.php
Normal file
34
src/Service/ProgressService.php
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user