mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-23 17:41:01 +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)
|
||||
{
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return new Response($json, 200, array('application/json'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Wallabag\CoreBundle\Entity;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
use Hateoas\Configuration\Annotation as Hateoas;
|
||||
|
@ -118,12 +119,22 @@ class Entry
|
|||
*/
|
||||
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
|
||||
*/
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->tags = new ArrayCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -381,4 +392,20 @@ class Entry
|
|||
{
|
||||
$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 JMS\Serializer\Annotation\XmlRoot;
|
||||
use JMS\Serializer\Annotation\ExclusionPolicy;
|
||||
use JMS\Serializer\Annotation\Expose;
|
||||
|
||||
/**
|
||||
* Tag
|
||||
|
@ -11,12 +13,14 @@ use JMS\Serializer\Annotation\XmlRoot;
|
|||
* @XmlRoot("tag")
|
||||
* @ORM\Table(name="tag")
|
||||
* @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TagRepository")
|
||||
* @ExclusionPolicy("all")
|
||||
*/
|
||||
class Tag
|
||||
{
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @Expose
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
|
@ -26,10 +30,16 @@ class Tag
|
|||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Expose
|
||||
* @ORM\Column(name="label", type="text")
|
||||
*/
|
||||
private $label;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="Entry", mappedBy="tags", cascade={"persist", "merge"})
|
||||
*/
|
||||
private $entries;
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
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