22
33namespace Xaav \QueueBundle \Queue \Adapter ;
44
5+ use Xaav \QueueBundle \Entity \SerializedJob ;
6+
57use Xaav \QueueBundle \Entity \Queue ;
68
79class DoctrineAdapter implements QueueAdapterInterface
@@ -14,23 +16,53 @@ public function __construct(array $options)
1416 $ this ->entityManager = $ container ->get ('doctrine ' )->getEntityManager ();
1517 }
1618
19+ /**
20+ * @return Queue
21+ */
22+ protected function getQueue ($ name )
23+ {
24+ $ queue = $ this ->entityManager
25+ ->getRepository ('XaavQueueBundle:Queue ' )
26+ ->findOneByName ($ name );
27+
28+ if (!$ queue ) {
29+
30+ $ queue = new Queue ();
31+ $ queue ->setName ($ name );
32+
33+ $ this ->entityManager ->persist ($ queue );
34+ }
35+
36+ if ($ queue ->getSerializedJobs ()->count () == 0 ) {
37+ $ this ->entityManager ->refresh ($ queue );
38+ }
39+
40+ return $ queue ;
41+ }
42+
1743 public function get ($ name )
1844 {
19- $ queue = $ this ->entityManager
20- ->getRepository ('XaavQueueBundle:Queue ' )
21- ->findOneByName ($ name );
45+ $ queue = $ this ->getQueue ($ name );
46+
47+ $ job = $ queue ->getSerializedJobs ()->last ();
48+ $ job ->setQueue ();
2249
23- if (!$ queue ) {
50+ $ this ->entityManager ->remove ($ job );
51+ $ this ->entityManager ->flush ();
2452
25- $ queue = new Queue ();
26- $ queue ->setName ($ name );
53+ return $ job ->getData ();
54+ }
55+
56+ public function add ($ name , $ job )
57+ {
58+ $ queue = $ this ->getQueue ($ name );
2759
28- $ this -> entityManager -> persist ( $ queue );
29- }
60+ $ job = new SerializedJob ( );
61+ $ job -> setData ( $ job );
3062
31- $ this -> entityManager -> refresh ( $ queue );
32- $ queue -> setEntityManager ( $ this ->entityManager );
63+ $ queue -> addSerializedJobs ( $ job );
64+ $ this ->entityManager -> persist ( $ job );
3365
34- return $ queue ;
66+ $ this -> entityManager -> flush () ;
3567 }
3668}
0 commit comments