This commit is contained in:
Sergio Álvarez 2022-05-23 20:40:22 +02:00
parent 703ef3c5b1
commit b58b92bc30
No known key found for this signature in database
GPG Key ID: 622780889DFDBDA5
14 changed files with 390 additions and 92 deletions

View File

@ -4,7 +4,7 @@
"minimum-stability": "stable", "minimum-stability": "stable",
"prefer-stable": true, "prefer-stable": true,
"require": { "require": {
"php": ">=8.0.2", "php": ">=8.1",
"ext-ctype": "*", "ext-ctype": "*",
"ext-iconv": "*", "ext-iconv": "*",
"doctrine/doctrine-bundle": "^2.6", "doctrine/doctrine-bundle": "^2.6",

View File

@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220523155141 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
// Added 'status' to INSERT
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('DROP INDEX IDX_E4F82A3DED5CA9E6');
$this->addSql('CREATE TEMPORARY TABLE __temp__mer_para_sub AS SELECT id, service_id, sub_date, unsub_date, pin FROM mer_para_sub');
$this->addSql('DROP TABLE mer_para_sub');
$this->addSql('CREATE TABLE mer_para_sub (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, sub_date DATETIME NOT NULL --(DC2Type:datetime_immutable)
, unsub_date DATETIME DEFAULT NULL --(DC2Type:datetime_immutable)
, pin INTEGER DEFAULT NULL, status INTEGER NOT NULL, CONSTRAINT FK_E4F82A3DED5CA9E6 FOREIGN KEY (service_id) REFERENCES mer_service (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
$this->addSql('INSERT INTO mer_para_sub (id, service_id, sub_date, unsub_date, pin, status) SELECT id, service_id, sub_date, unsub_date, pin, 1 FROM __temp__mer_para_sub');
$this->addSql('DROP TABLE __temp__mer_para_sub');
$this->addSql('CREATE INDEX IDX_E4F82A3DED5CA9E6 ON mer_para_sub (service_id)');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP INDEX IDX_E4F82A3DED5CA9E6');
$this->addSql('CREATE TEMPORARY TABLE __temp__mer_para_sub AS SELECT id, service_id, pin, sub_date, unsub_date FROM mer_para_sub');
$this->addSql('DROP TABLE mer_para_sub');
$this->addSql('CREATE TABLE mer_para_sub (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, pin INTEGER DEFAULT NULL, sub_date DATETIME NOT NULL --(DC2Type:datetime_immutable)
, unsub_date DATETIME DEFAULT NULL --(DC2Type:datetime_immutable)
)');
$this->addSql('INSERT INTO mer_para_sub (id, service_id, pin, sub_date, unsub_date) SELECT id, service_id, pin, sub_date, unsub_date FROM __temp__mer_para_sub');
$this->addSql('DROP TABLE __temp__mer_para_sub');
$this->addSql('CREATE INDEX IDX_E4F82A3DED5CA9E6 ON mer_para_sub (service_id)');
}
}

View File

@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220523155631 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE mer_be_sub (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, code VARCHAR(255) DEFAULT NULL, status INTEGER NOT NULL, sub_date DATETIME NOT NULL --(DC2Type:datetime_immutable)
, unsub_date DATETIME DEFAULT NULL --(DC2Type:datetime_immutable)
)');
$this->addSql('CREATE INDEX IDX_CA4C3EB8ED5CA9E6 ON mer_be_sub (service_id)');
$this->addSql('DROP INDEX IDX_E4F82A3DED5CA9E6');
$this->addSql('CREATE TEMPORARY TABLE __temp__mer_para_sub AS SELECT id, service_id, sub_date, unsub_date, pin, status FROM mer_para_sub');
$this->addSql('DROP TABLE mer_para_sub');
$this->addSql('CREATE TABLE mer_para_sub (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, sub_date DATETIME NOT NULL --(DC2Type:datetime_immutable)
, unsub_date DATETIME DEFAULT NULL --(DC2Type:datetime_immutable)
, pin INTEGER DEFAULT NULL, status INTEGER NOT NULL, CONSTRAINT FK_E4F82A3DED5CA9E6 FOREIGN KEY (service_id) REFERENCES mer_service (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
$this->addSql('INSERT INTO mer_para_sub (id, service_id, sub_date, unsub_date, pin, status) SELECT id, service_id, sub_date, unsub_date, pin, status FROM __temp__mer_para_sub');
$this->addSql('DROP TABLE __temp__mer_para_sub');
$this->addSql('CREATE INDEX IDX_E4F82A3DED5CA9E6 ON mer_para_sub (service_id)');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP TABLE mer_be_sub');
$this->addSql('DROP INDEX IDX_E4F82A3DED5CA9E6');
$this->addSql('CREATE TEMPORARY TABLE __temp__mer_para_sub AS SELECT id, service_id, pin, status, sub_date, unsub_date FROM mer_para_sub');
$this->addSql('DROP TABLE mer_para_sub');
$this->addSql('CREATE TABLE mer_para_sub (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, pin INTEGER DEFAULT NULL, status INTEGER NOT NULL, sub_date DATETIME NOT NULL --(DC2Type:datetime_immutable)
, unsub_date DATETIME DEFAULT NULL --(DC2Type:datetime_immutable)
)');
$this->addSql('INSERT INTO mer_para_sub (id, service_id, pin, status, sub_date, unsub_date) SELECT id, service_id, pin, status, sub_date, unsub_date FROM __temp__mer_para_sub');
$this->addSql('DROP TABLE __temp__mer_para_sub');
$this->addSql('CREATE INDEX IDX_E4F82A3DED5CA9E6 ON mer_para_sub (service_id)');
}
}

View File

@ -2,8 +2,11 @@
namespace App\Controller; namespace App\Controller;
use App\Repository\MerBeSubRepository;
use App\Repository\MerParaSubRepository; use App\Repository\MerParaSubRepository;
use App\Repository\MerServiceRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use App\Repository\Entity1Repository; use App\Repository\Entity1Repository;
@ -11,18 +14,38 @@ use App\Repository\Entity1Repository;
class IndexController extends AbstractController class IndexController extends AbstractController
{ {
#[Route('/', name: 'app_index')] #[Route('/', name: 'app_index')]
public function index(Entity1Repository $repo, MerParaSubRepository $subRepo): Response public function index(
Entity1Repository $repo,
MerParaSubRepository $paraSubRepo,
MerBeSubRepository $beSubRepo
): Response
{ {
// repo dummy // repo dummy
$sm = $repo->getSchemaManager(); $sm = $repo->getSchemaManager();
$sub = $subRepo->findOne(); foreach ($paraSubRepo->findAll() as $sub) {
dump($sub); dump($sub);
dump($sub->getService()); }
dump('-------------------');
foreach ($beSubRepo->findAll() as $sub) {
dump($sub);
}
return $this->render('index/index.html.twig', [ return $this->render('index/index.html.twig', [
'controller_name' => 'IndexController', 'schemaManager' => $sm,
'schemaManager' => $sm //'offer_id' => $sub->getService()->ge
]); ]);
} }
#[Route('/notification/dm', name: 'notification_dm')]
public function notificationDm(Request $request, MerServiceRepository $repo): Response
{
foreach ($repo->findByOfferId($request->query->get('offer_id')) as $sub) {
dump($sub);
}
return $this->render('index/notificationDm.html.twig');
}
} }

View File

@ -3,9 +3,11 @@
namespace App\DataFixtures; namespace App\DataFixtures;
use App\Entity\MerBeDM; use App\Entity\MerBeDM;
use App\Entity\MerBeSub;
use App\Entity\MerParaDM; use App\Entity\MerParaDM;
use App\Entity\MerParaDT; use App\Entity\MerParaDT;
use App\Entity\MerParaSub; use App\Entity\MerParaSub;
use App\Enum\SubStatus;
use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager; use Doctrine\Persistence\ObjectManager;
@ -13,42 +15,65 @@ class MerFixtures extends Fixture
{ {
public function load(ObjectManager $manager): void public function load(ObjectManager $manager): void
{ {
// service1 $ser1 = new MerParaDM();
$tmp = new MerParaDM(); $ser1->setMccMnc(12345)
$tmp->setMccMnc(12345)->setOfferId(221)->setProductCode('code1'); ->setOfferId(221)
$manager->persist($tmp); ->setProductCode('code1');
// sub $ser2 = new MerParaDM();
$sub = new MerParaSub(); $ser2->setMccMnc(12345)
$sub->setService($tmp)->setPin(1122)->setSubDate(new \DateTimeImmutable('now')); ->setOfferId(223)
$manager->persist($sub); ->setProductCode('code2');
// service 2 $ser3 = new MerParaDT();
$tmp = new MerParaDM(); $ser3->setMccMnc(12345)
$tmp->setMccMnc(12345)->setOfferId(223)->setProductCode('code2'); ->setServiceId('ser-vi-ce1')
$manager->persist($tmp); ->setApiKey('api1');
// sub $ser4 = new MerParaDT();
$sub = new MerParaSub(); $ser4->setMccMnc(12341)
$sub->setService($tmp)->setPin(2211)->setSubDate(new \DateTimeImmutable('now')); ->setServiceId('ser-vi-ce2')
$manager->persist($sub); ->setApiKey('api2');
$sub = new MerParaSub(); $ser5 = new MerBeDM();
$sub->setService($tmp)->setSubDate(new \DateTimeImmutable('now')); $ser5->setMccMnc(12341)
$manager->persist($sub); ->setOfferId(112)
->setActivationCode('active1');
// service 3 $sub1 = new MerParaSub();
$tmp = new MerParaDT(); $sub1->setService($ser1)
$tmp->setMccMnc(12345)->setServiceId('ser-vi-ce1')->setApiKey('api1'); ->setStatus(SubStatus::ACTIVE)
$manager->persist($tmp); ->setPin(1122)
->setSubDate(new \DateTimeImmutable('now'));
$tmp = new MerParaDT(); $sub2 = new MerParaSub();
$tmp->setMccMnc(12341)->setServiceId('ser-vi-ce2')->setApiKey('api2'); $sub2->setService($ser3)
$manager->persist($tmp); ->setStatus(SubStatus::PREREGISTERED)
->setPin(2211)
->setSubDate(new \DateTimeImmutable('now'));
$tmp = new MerBeDM(); $sub3 = new MerParaSub();
$tmp->setMccMnc(12341)->setOfferId(112)->setActivationCode('active1'); $sub3->setService($ser3)
$manager->persist($tmp); ->setStatus(SubStatus::CANCELLED)
->setSubDate(new \DateTimeImmutable('yesterday'))
->setUnsubDate(new \DateTimeImmutable('now'));
$sub4 = new MerBeSub();
$sub4->setService($ser5)
->setStatus(SubStatus::REGISTERED)
->setCode('CoDe')
->setSubDate(new \DateTimeImmutable('now'));
$manager->persist($ser1);
$manager->persist($ser2);
$manager->persist($ser3);
$manager->persist($ser4);
$manager->persist($ser5);
$manager->persist($sub1);
$manager->persist($sub2);
$manager->persist($sub3);
$manager->persist($sub4);
$manager->flush(); $manager->flush();
} }

27
src/Entity/MerBeSub.php Normal file
View File

@ -0,0 +1,27 @@
<?php
namespace App\Entity;
use App\Repository\MerParaSubRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class MerBeSub
{
use MerSubBaseTrait;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $code;
public function getCode(): ?int
{
return $this->code;
}
public function setCode(?string $code): self
{
$this->code = $code;
return $this;
}
}

View File

@ -8,29 +8,11 @@ use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: MerParaSubRepository::class)] #[ORM\Entity(repositoryClass: MerParaSubRepository::class)]
class MerParaSub class MerParaSub
{ {
#[ORM\Id] use MerSubBaseTrait;
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\Column(type: 'integer', nullable: true)] #[ORM\Column(type: 'integer', nullable: true)]
private $pin; private $pin;
#[ORM\ManyToOne(targetEntity: MerService::class)]
#[ORM\JoinColumn(nullable: false)]
private MerService $service;
#[ORM\Column(type: 'datetime_immutable')]
private $subDate;
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
private $unsubDate;
public function getId(): ?int
{
return $this->id;
}
public function getPin(): ?int public function getPin(): ?int
{ {
return $this->pin; return $this->pin;
@ -42,40 +24,4 @@ class MerParaSub
return $this; return $this;
} }
public function getService(): ?MerService
{
return $this->service;
}
public function setService(?MerService $service): self
{
$this->service = $service;
return $this;
}
public function getSubDate(): ?\DateTimeImmutable
{
return $this->subDate;
}
public function setSubDate(\DateTimeImmutable $subDate): self
{
$this->subDate = $subDate;
return $this;
}
public function getUnsubDate(): ?\DateTimeImmutable
{
return $this->unsubDate;
}
public function setUnsubDate(?\DateTimeImmutable $unsubDate): self
{
$this->unsubDate = $unsubDate;
return $this;
}
} }

View File

@ -0,0 +1,80 @@
<?php
namespace App\Entity;
use App\Enum\SubStatus;
use Doctrine\ORM\Mapping as ORM;
trait MerSubBaseTrait
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\Column(enumType: SubStatus::class)]
private SubStatus $status;
#[ORM\ManyToOne(targetEntity: MerService::class)]
#[ORM\JoinColumn(nullable: false)]
private MerService $service;
#[ORM\Column(type: 'datetime_immutable')]
private $subDate;
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
private $unsubDate;
public function getId(): ?int
{
return $this->id;
}
public function getStatus(): SubStatus
{
return $this->status;
}
public function setStatus(SubStatus $status): self
{
$this->status = $status;
return $this;
}
public function getService(): ?MerService
{
return $this->service;
}
public function setService(?MerService $service): self
{
$this->service = $service;
return $this;
}
public function getSubDate(): ?\DateTimeImmutable
{
return $this->subDate;
}
public function setSubDate(\DateTimeImmutable $subDate): self
{
$this->subDate = $subDate;
return $this;
}
public function getUnsubDate(): ?\DateTimeImmutable
{
return $this->unsubDate;
}
public function setUnsubDate(?\DateTimeImmutable $unsubDate): self
{
$this->unsubDate = $unsubDate;
return $this;
}
}

12
src/Enum/SubStatus.php Normal file
View File

@ -0,0 +1,12 @@
<?php
namespace App\Enum;
enum SubStatus: int
{
case PREREGISTERED = 1;
case REGISTERED = 2;
case ACTIVE = 3;
case CANCELLED = 4;
case EXPIRED = 5;
}

View File

@ -0,0 +1,66 @@
<?php
namespace App\Repository;
use App\Entity\MerBeSub;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<MerBeSub>
*
* @method MerBeSub|null find($id, $lockMode = null, $lockVersion = null)
* @method MerBeSub|null findOneBy(array $criteria, array $orderBy = null)
* @method MerBeSub[] findAll()
* @method MerBeSub[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class MerBeSubRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, MerBeSub::class);
}
public function add(MerBeSub $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(MerBeSub $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
// /**
// * @return MerBeSub[] Returns an array of MerBeSub objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('m')
// ->andWhere('m.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('m.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
public function findOne(): ?MerBeSub
{
return $this->createQueryBuilder('m')
->orderBy('m.id', 'ASC')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult()
;
}
}

View File

@ -67,7 +67,7 @@ class MerParaSubRepository extends ServiceEntityRepository
public function findOne(): ?MerParaSub public function findOne(): ?MerParaSub
{ {
return $this->createQueryBuilder('m') return $this->createQueryBuilder('m')
->orderBy('m.id', 'DESC') ->orderBy('m.id', 'ASC')
->setMaxResults(1) ->setMaxResults(1)
->getQuery() ->getQuery()
->getOneOrNullResult() ->getOneOrNullResult()

View File

@ -62,4 +62,14 @@ class MerServiceRepository extends ServiceEntityRepository
// ->getOneOrNullResult() // ->getOneOrNullResult()
// ; // ;
// } // }
public function findByOfferId(int $offerId)
{
return $this->createQueryBuilder('s')
->andWhere('s.offer_id = :offer_id')
->setParameter('offer_id', $offerId)
->getQuery()
->getResult()
;
}
} }

View File

@ -32,4 +32,6 @@
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<p><a href="{{ path('notification_dm', {'offer_id': 112}) }}">dm notification</a></p>
{% endblock %} {% endblock %}

View File

@ -0,0 +1,7 @@
{% extends 'base.html.twig' %}
{% block title %}notif dm!{% endblock %}
{% block body %}
<p>check profiler output</p>
{% endblock %}