Compare commits

...

5 Commits

Author SHA1 Message Date
607a74e311
add success email 2025-02-04 19:24:48 +01:00
7799a42825 fix deployment again
Reviewed-on: #18
2025-02-04 18:24:18 +00:00
539e015a8f fix deployment
Reviewed-on: #17
2025-02-04 18:17:35 +00:00
40bcd2af1c fix prod db
Reviewed-on: #16
2025-02-04 17:45:08 +00:00
5cfb094094 refactor deployment
Reviewed-on: http://git.simonis.lol/projects/abiball/pulls/15
2025-02-02 17:34:23 +00:00
7 changed files with 128 additions and 21 deletions

View File

@ -9,9 +9,10 @@ RUN chown -R www-data:www-data /var/www/html
RUN rm /etc/apache2/sites-enabled/000-default.conf RUN rm /etc/apache2/sites-enabled/000-default.conf
RUN apt-get update RUN apt-get update
RUN apt-get install -qq -y --no-install-recommends libicu-dev libpng-dev libxml2-dev libzip-dev libonig-dev libxslt-dev RUN apt-get install -qq -y --no-install-recommends libicu-dev libpng-dev libxml2-dev libzip-dev libonig-dev libxslt-dev libpq-dev
RUN docker-php-ext-install pdo pdo_mysql mysqli gd opcache intl mbstring zip gd xsl RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql
RUN docker-php-ext-install pdo pdo_pgsql pgsql gd opcache intl mbstring zip gd xsl
RUN a2enmod rewrite RUN a2enmod rewrite
RUN pecl install apcu && docker-php-ext-enable apcu RUN pecl install apcu && docker-php-ext-enable apcu

View File

@ -9,15 +9,17 @@ jobs:
build: build:
runs-on: remote runs-on: remote
steps: steps:
- uses: https://git.simonis.lol/actions/checkout@v4 - name: Checkout
- uses: https://git.simonis.lol/actions/login@v1 uses: https://git.simonis.lol/actions/checkout@v4
- name: Build
run: docker buildx build -f .docker/Dockerfile -t git.simonis.lol/projects/abiball:latest .
- name: Login
uses: https://git.simonis.lol/actions/login@v1
with: with:
registry: git.simonis.lol registry: git.simonis.lol
username: ${{ vars.DOCKER_USER }} username: ${{ vars.DOCKER_USER }}
password: ${{ vars.DOCKER_PW }} password: ${{ vars.DOCKER_PW }}
- name: Push
- name: build
run: docker buildx build -f .docker/Dockerfile -t git.simonis.lol/projects/abiball:latest .
- name: push
run: docker push git.simonis.lol/projects/abiball:latest run: docker push git.simonis.lol/projects/abiball:latest

13
src/Enum/FoodData.php Normal file
View File

@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace App\Enum;
class FoodData
{
public const FOOD_DATA = [
1 => 'Mit Fleisch',
2 => 'Vegetarisch',
3 => 'Vegan'
];
}

View File

@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace App\Service;
use App\Entity\Payment;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
class TicketEmailService
{
public function __construct(
private readonly MailerInterface $mailer,
#[Autowire(env: 'SENDER_MAIL')]
private readonly string $senderMail
) {
}
public function sendSuccessEmail(Payment $payment): void
{
$mail = (new TemplatedEmail())
->htmlTemplate('email/order.html.twig')
->subject('Abiball Ticket')
->from(new Address($this->senderMail, 'Noreply'))
->to($payment->getCustomer()?->getEmail())
->context(['payment' => $payment]);
$this->mailer->send($mail);
}
}

View File

@ -21,6 +21,7 @@ class TicketService
private readonly UrlGeneratorInterface $generator, private readonly UrlGeneratorInterface $generator,
private readonly EntityManagerInterface $em, private readonly EntityManagerInterface $em,
private readonly PaymentRepository $paymentRepository, private readonly PaymentRepository $paymentRepository,
private readonly TicketEmailService $emailService,
#[Autowire(env: 'STRIPE_SECRET_KEY')] #[Autowire(env: 'STRIPE_SECRET_KEY')]
string $stripeKey string $stripeKey
) { ) {
@ -36,18 +37,6 @@ class TicketService
return $session; return $session;
} }
public function saveTicketData(TicketFormData $data, string $sessionId): void
{
$payment = (new Payment())
->setSessionId($sessionId)
->setCompleted(false)
->setCustomer($this->createEntityFromData($data));
$this->em->persist($payment);
$this->em->flush();
}
public function completePayment(string $sessionId): bool public function completePayment(string $sessionId): bool
{ {
if (!$payment = $this->paymentRepository->findOneBy(['sessionId' => $sessionId])) { if (!$payment = $this->paymentRepository->findOneBy(['sessionId' => $sessionId])) {
@ -57,9 +46,23 @@ class TicketService
$payment->setCompleted(true); $payment->setCompleted(true);
$this->em->flush(); $this->em->flush();
$this->emailService->sendSuccessEmail($payment);
return true; return true;
} }
private function saveTicketData(TicketFormData $data, string $sessionId): void
{
$payment = (new Payment())
->setSessionId($sessionId)
->setCompleted(false)
->setCustomer($this->createEntityFromData($data));
$this->em->persist($payment);
$this->em->flush();
}
private function getLineItems(array $tickets): array private function getLineItems(array $tickets): array
{ {
$lineItems = []; $lineItems = [];

30
src/Twig/Ticket.php Normal file
View File

@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace App\Twig;
use App\Enum\FoodData;
use App\Enum\TicketData;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class Ticket extends AbstractExtension
{
public function getFilters(): array
{
return [
new TwigFilter('food', $this->getFoodName(...)),
new TwigFilter('ticket', $this->getTicket(...))
];
}
public function getFoodName(int $id): string
{
return FoodData::FOOD_DATA[$id] ?? 'N/A';
}
public function getTicket(int $id): array
{
return TicketData::TICKET_DATA[$id] ?? ['name' => 'N/A', 'price' => 'N/A'];
}
}

View File

@ -0,0 +1,26 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Abiball Ticket</title>
</head>
<body>
Hallo {{ payment.customer.firstname }}
<br>
text
<br>
{% for ticket in payment.customer.tickets %}
{{ (ticket.type | ticket)['name'] }} ({{ (ticket.type | ticket)['price'] }}€)
<br>
{{ ticket.foodType | food }}
<br>
{% if ticket.note %}
<br>
{{ ticket.note }}
{% endif %}
{% if not loop.last %}
<hr>
{% endif %}
{% endfor %}
</body>
</html>