Commit 5e40c738 authored by SpinShare's avatar SpinShare

moved finds to repository, added hot api call

parent 2cb8437e
......@@ -56,7 +56,42 @@ class APIController extends AbstractController
$em = $this->getDoctrine()->getManager();
$data = [];
$results = $em->getRepository(Song::class)->findBy(array(), array('id' => 'DESC'), 12, 12 * $offset);
$results = $em->getRepository(Song::class)->getNew($offset);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
foreach($results as $result) {
$oneResult = [];
$oneResult['id'] = $result->getId();
$oneResult['title'] = $result->getTitle();
$oneResult['subtitle'] = $result->getSubtitle();
$oneResult['artist'] = $result->getArtist();
$oneResult['charter'] = $result->getCharter();
$oneResult['hasEasyDifficulty'] = $result->getHasEasyDifficulty();
$oneResult['hasNormalDifficulty'] = $result->getHasNormalDifficulty();
$oneResult['hasHardDifficulty'] = $result->getHasHardDifficulty();
$oneResult['hasExtremeDifficulty'] = $result->getHasExtremeDifficulty();
$oneResult['hasXDDifficulty'] = $result->getHasXDDifficulty();
$oneResult['cover'] = $baseUrl."/uploads/cover/".$result->getFileReference().".png";
$oneResult['zip'] = $this->generateUrl('api.songs.download', array('id' => $result->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$data[] = $oneResult;
}
$response = new JsonResponse(['version' => $this->apiVersion, 'status' => 200, 'data' => $data]);
$response->headers->set('Access-Control-Allow-Origin', '*');
return $response;
}
/**
* @Route("/api/songs/hot/{offset}", name="api.songs.hot")
*/
public function songsHot(Request $request, int $offset = 0)
{
$em = $this->getDoctrine()->getManager();
$data = [];
$results = $em->getRepository(Song::class)->getHot($offset);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
foreach($results as $result) {
......@@ -91,7 +126,7 @@ class APIController extends AbstractController
$em = $this->getDoctrine()->getManager();
$data = [];
$results = $em->getRepository(Song::class)->findBy(array(), array('downloads' => 'DESC', 'views' => 'DESC'), 12, 12 * $offset);
$results = $em->getRepository(Song::class)->getPopular($offset);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
foreach($results as $result) {
......
......@@ -45,6 +45,7 @@ class UploadController extends AbstractController
if($backupFile) {
$song->setFileReference("spinshare_".uniqid());
$song->setTags($data['tags']);
$song->setUploadDate(new \DateTime('NOW'));
$song->setIsExplicit($data['isExplicit']);
$zip = new \ZipArchive;
......
......@@ -96,6 +96,11 @@ class Song
*/
private $previewStart;
/**
* @ORM\Column(type="datetime")
*/
private $uploadDate;
public function getId(): ?int
{
return $this->id;
......@@ -292,4 +297,16 @@ class Song
return $this;
}
public function getUploadDate(): ?\DateTimeInterface
{
return $this->uploadDate;
}
public function setUploadDate(\DateTimeInterface $uploadDate): self
{
$this->uploadDate = $uploadDate;
return $this;
}
}
......@@ -18,4 +18,43 @@ class SongRepository extends ServiceEntityRepository
{
parent::__construct($registry, Song::class);
}
public function getNew(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->orderBy('e.uploadDate', 'DESC')
->setFirstResult(12 * $page)
->setMaxResults(12);
$result = $qb->getQuery()->getResult();
return $result;
}
public function getHot(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->where('e.uploadDate <= :begin')
->andWhere('e.uploadDate >= :end')
->orderBy('e.downloads', 'DESC')
->orderBy('e.views', 'DESC')
->setFirstResult(12 * $page)
->setMaxResults(12)
->setParameter('begin', new \DateTime('NOW'))
->setParameter('end', new \DateTime('-7 days'));
$result = $qb->getQuery()->getResult();
return $result;
}
public function getPopular(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->orderBy('e.downloads', 'DESC')
->orderBy('e.views', 'DESC')
->setFirstResult(12 * $page)
->setMaxResults(12);
$result = $qb->getQuery()->getResult();
return $result;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment