mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-27 11:31:05 +00:00
add relation between entry and tag
This commit is contained in:
parent
6d37a7e6c1
commit
0a018fe039
6 changed files with 53 additions and 122 deletions
|
@ -196,6 +196,9 @@ class WallabagRestController extends Controller
|
||||||
*/
|
*/
|
||||||
public function getEntriesTagsAction(Entry $entry)
|
public function getEntriesTagsAction(Entry $entry)
|
||||||
{
|
{
|
||||||
|
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||||
|
|
||||||
|
return new Response($json, 200, array('application/json'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Wallabag\CoreBundle\Entity;
|
namespace Wallabag\CoreBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use Symfony\Component\Validator\Constraints as Assert;
|
use Symfony\Component\Validator\Constraints as Assert;
|
||||||
use Hateoas\Configuration\Annotation as Hateoas;
|
use Hateoas\Configuration\Annotation as Hateoas;
|
||||||
|
@ -118,12 +119,22 @@ class Entry
|
||||||
*/
|
*/
|
||||||
private $user;
|
private $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist", "merge"})
|
||||||
|
* @ORM\JoinTable(name="tags_entries",
|
||||||
|
* joinColumns={@ORM\JoinColumn(name="entry_id", referencedColumnName="id")},
|
||||||
|
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
private $tags;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @param User $user
|
* @param User $user
|
||||||
*/
|
*/
|
||||||
public function __construct(User $user)
|
public function __construct(User $user)
|
||||||
{
|
{
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
|
$this->tags = new ArrayCollection();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -381,4 +392,20 @@ class Entry
|
||||||
{
|
{
|
||||||
$this->isPublic = $isPublic;
|
$this->isPublic = $isPublic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return ArrayCollection<Tag>
|
||||||
|
*/
|
||||||
|
public function getTags()
|
||||||
|
{
|
||||||
|
return $this->tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Tag $tag
|
||||||
|
*/
|
||||||
|
public function addTag(Tag $tag)
|
||||||
|
{
|
||||||
|
$this->tags[] = $tag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ namespace Wallabag\CoreBundle\Entity;
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use JMS\Serializer\Annotation\XmlRoot;
|
use JMS\Serializer\Annotation\XmlRoot;
|
||||||
|
use JMS\Serializer\Annotation\ExclusionPolicy;
|
||||||
|
use JMS\Serializer\Annotation\Expose;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tag
|
* Tag
|
||||||
|
@ -11,12 +13,14 @@ use JMS\Serializer\Annotation\XmlRoot;
|
||||||
* @XmlRoot("tag")
|
* @XmlRoot("tag")
|
||||||
* @ORM\Table(name="tag")
|
* @ORM\Table(name="tag")
|
||||||
* @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TagRepository")
|
* @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TagRepository")
|
||||||
|
* @ExclusionPolicy("all")
|
||||||
*/
|
*/
|
||||||
class Tag
|
class Tag
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var integer
|
* @var integer
|
||||||
*
|
*
|
||||||
|
* @Expose
|
||||||
* @ORM\Column(name="id", type="integer")
|
* @ORM\Column(name="id", type="integer")
|
||||||
* @ORM\Id
|
* @ORM\Id
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
* @ORM\GeneratedValue(strategy="AUTO")
|
||||||
|
@ -26,10 +30,16 @@ class Tag
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
|
* @Expose
|
||||||
* @ORM\Column(name="label", type="text")
|
* @ORM\Column(name="label", type="text")
|
||||||
*/
|
*/
|
||||||
private $label;
|
private $label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\ManyToMany(targetEntity="Entry", mappedBy="tags", cascade={"persist", "merge"})
|
||||||
|
*/
|
||||||
|
private $entries;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get id
|
* Get id
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Wallabag\CoreBundle\Entity;
|
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TagsEntries
|
|
||||||
*
|
|
||||||
* @ORM\Table(name="tags_entries")
|
|
||||||
* @ORM\Entity
|
|
||||||
*/
|
|
||||||
class TagsEntries
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="id", type="integer")
|
|
||||||
* @ORM\Id
|
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
|
||||||
*/
|
|
||||||
private $id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="entry_id", type="integer")
|
|
||||||
*/
|
|
||||||
private $entryId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="tag_id", type="integer")
|
|
||||||
*/
|
|
||||||
private $tagId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get id
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set entryId
|
|
||||||
*
|
|
||||||
* @param integer $entryId
|
|
||||||
* @return TagsEntries
|
|
||||||
*/
|
|
||||||
public function setEntryId($entryId)
|
|
||||||
{
|
|
||||||
$this->entryId = $entryId;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get entryId
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getEntryId()
|
|
||||||
{
|
|
||||||
return $this->entryId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set tagId
|
|
||||||
*
|
|
||||||
* @param integer $tagId
|
|
||||||
* @return TagsEntries
|
|
||||||
*/
|
|
||||||
public function setTagId($tagId)
|
|
||||||
{
|
|
||||||
$this->tagId = $tagId;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get tagId
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getTagId()
|
|
||||||
{
|
|
||||||
return $this->tagId;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,5 +6,18 @@ use Doctrine\ORM\EntityRepository;
|
||||||
|
|
||||||
class TagRepository extends EntityRepository
|
class TagRepository extends EntityRepository
|
||||||
{
|
{
|
||||||
|
public function findByEntries($entryId)
|
||||||
|
{
|
||||||
|
$qb = $this->createQueryBuilder('t')
|
||||||
|
->select('t')
|
||||||
|
->leftJoin('t.id', 'u')
|
||||||
|
->where('e.isStarred = true')
|
||||||
|
->andWhere('u.id =:userId')->setParameter('userId', $userId)
|
||||||
|
->orderBy('e.createdAt', 'desc')
|
||||||
|
->getQuery();
|
||||||
|
|
||||||
|
$paginator = new Paginator($qb);
|
||||||
|
|
||||||
|
return $paginator;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,33 +150,4 @@ class WallabagRestControllerTest extends WallabagTestCase
|
||||||
|
|
||||||
$this->assertEquals(404, $client->getResponse()->getStatusCode());
|
$this->assertEquals(404, $client->getResponse()->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetOneTag()
|
|
||||||
{
|
|
||||||
$client = $this->createClient();
|
|
||||||
$client->request('GET', '/api/salts/admin.json');
|
|
||||||
$salt = json_decode($client->getResponse()->getContent());
|
|
||||||
|
|
||||||
$headers = $this->generateHeaders('admin', 'test', $salt[0]);
|
|
||||||
|
|
||||||
$tag = $client->getContainer()
|
|
||||||
->get('doctrine.orm.entity_manager')
|
|
||||||
->getRepository('WallabagCoreBundle:Tag')
|
|
||||||
->findOneByLabel('foo');
|
|
||||||
|
|
||||||
if (!$tag) {
|
|
||||||
$this->markTestSkipped('No content found in db.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$client->request('GET', '/api/tags/'.$tag->getLabel().'.json', array(), array(), $headers);
|
|
||||||
|
|
||||||
$this->assertEquals(json_encode($tag), $client->getResponse()->getContent());
|
|
||||||
|
|
||||||
$this->assertTrue(
|
|
||||||
$client->getResponse()->headers->contains(
|
|
||||||
'Content-Type',
|
|
||||||
'application/json'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue