Commit 01ef2aad authored by Andreas Heimann's avatar Andreas Heimann

add new/popular songs & ads api calls

parent f8c74f5e
...@@ -10,6 +10,7 @@ use Symfony\Component\HttpFoundation\Request; ...@@ -10,6 +10,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use App\Entity\Song; use App\Entity\Song;
use App\Entity\Ad;
class APIController extends AbstractController class APIController extends AbstractController
{ {
...@@ -24,30 +25,56 @@ class APIController extends AbstractController ...@@ -24,30 +25,56 @@ class APIController extends AbstractController
} }
/** /**
* @Route("/api/songs/new", name="api.songs.new") * @Route("/api/songs/new/{offset}", name="api.songs.new")
*/ */
public function songsNew() public function songsNew(Request $request, int $offset = 0)
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$data = []; $data = [];
$results = $em->getRepository(Song::class)->findBy(array(), array('id' => 'DESC'), 10, 0); $results = $em->getRepository(Song::class)->findBy(array(), array('id' => 'DESC'), 6, 6 * $offset);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
foreach($results as $result) { foreach($results as $result) {
$data['songs'][] = $result->getId(); $oneResult = [];
$oneResult['id'] = $result->getId();
$oneResult['title'] = $result->getTitle();
$oneResult['subtitle'] = $result->getTitle();
$oneResult['artist'] = $result->getArtist();
$oneResult['charter'] = $result->getCharter();
$oneResult['cover'] = $baseUrl."/uploads/cover/".$result->getFileReference().".png";
$data[] = $oneResult;
} }
return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]); return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]);
} }
/** /**
* @Route("/api/songs/hot", name="api.songs.hot") * @Route("/api/songs/popular/{offset}", name="api.songs.popular")
*/ */
public function songsHot() public function songsPopular(Request $request, int $offset = 0)
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$data = []; $data = [];
$results = $em->getRepository(Song::class)->findBy(array(), array('downloads' => 'DESC'), 6, 6 * $offset);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
foreach($results as $result) {
$oneResult = [];
$oneResult['id'] = $result->getId();
$oneResult['title'] = $result->getTitle();
$oneResult['subtitle'] = $result->getTitle();
$oneResult['artist'] = $result->getArtist();
$oneResult['charter'] = $result->getCharter();
$oneResult['cover'] = $baseUrl."/uploads/cover/".$result->getFileReference().".png";
$data[] = $oneResult;
}
return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]); return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]);
} }
...@@ -65,12 +92,17 @@ class APIController extends AbstractController ...@@ -65,12 +92,17 @@ class APIController extends AbstractController
if(!$result) { if(!$result) {
return new JsonResponse(['version' => $this->currentVersion, 'status' => 404, 'data' => []]); return new JsonResponse(['version' => $this->currentVersion, 'status' => 404, 'data' => []]);
} else { } else {
$result->setViews($result->getViews() + 1);
$em->persist($result);
$em->flush();
$data['id'] = $result->getId();
$data['title'] = $result->getTitle(); $data['title'] = $result->getTitle();
$data['subtitle'] = $result->getTitle(); $data['subtitle'] = $result->getTitle();
$data['artist'] = $result->getArtist(); $data['artist'] = $result->getArtist();
$data['charter'] = $result->getCharter(); $data['charter'] = $result->getCharter();
$data['paths']['ogg'] = $baseUrl.DIRECTORY_SEPARATOR."uploads".DIRECTORY_SEPARATOR."audio".DIRECTORY_SEPARATOR.$result->getFileReference().".ogg"; $data['paths']['ogg'] = $baseUrl."uploads/audio/".$result->getFileReference().".ogg";
$data['paths']['cover'] = $baseUrl.DIRECTORY_SEPARATOR."uploads".DIRECTORY_SEPARATOR."cover".DIRECTORY_SEPARATOR.$result->getFileReference().".png"; $data['paths']['cover'] = $baseUrl."uploads/cover/".$result->getFileReference().".png";
$data['paths']['zip'] = $this->generateUrl('api.songs.download', array('id' => $result->getId()), UrlGeneratorInterface::ABSOLUTE_URL); $data['paths']['zip'] = $this->generateUrl('api.songs.download', array('id' => $result->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]); return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]);
...@@ -89,6 +121,10 @@ class APIController extends AbstractController ...@@ -89,6 +121,10 @@ class APIController extends AbstractController
if(!$result) { if(!$result) {
return new JsonResponse(['version' => $this->currentVersion, 'status' => 404, 'data' => []]); return new JsonResponse(['version' => $this->currentVersion, 'status' => 404, 'data' => []]);
} else { } else {
$result->setDownloads($result->getDownloads() + 1);
$em->persist($result);
$em->flush();
$zipLocation = $this->getParameter('temp_path').DIRECTORY_SEPARATOR; $zipLocation = $this->getParameter('temp_path').DIRECTORY_SEPARATOR;
$zipName = $result->getSRTBOriginalName().".zip"; $zipName = $result->getSRTBOriginalName().".zip";
...@@ -109,4 +145,36 @@ class APIController extends AbstractController ...@@ -109,4 +145,36 @@ class APIController extends AbstractController
return $response; return $response;
} }
} }
/**
* @Route("/api/ads", name="api.ads")
*/
public function ads(Request $request)
{
$em = $this->getDoctrine()->getManager();
$results = $em->getRepository(Ad::class)->findBy(array('isVisible' => true), array('id' => 'DESC'), 2);
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
if(!$results) {
return new JsonResponse(['version' => $this->currentVersion, 'status' => 404, 'data' => []]);
} else {
foreach($results as $result) {
$oneResult = [];
$oneResult['id'] = $result->getId();
$oneResult['title'] = $result->getTitle();
$oneResult['type'] = $result->getType();
$oneResult['color'] = $result->getColor();
$oneResult['button']['type'] = $result->getButtonType();
$oneResult['button']['data'] = $result->getButtonData();
$oneResult['isVisible'] = $result->getIsVisible();
$oneResult['image_path'] = $baseUrl."/uploads/ads/".$result->getImagePath();
$data[] = $oneResult;
}
return new JsonResponse(['version' => $this->currentVersion, 'status' => 200, 'data' => $data]);
}
}
} }
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