Compare commits

...

1 Commits

Author SHA1 Message Date
00965eeb7f 001-public-grid-viewer — Add QA / Quickstart / Decision docs, scheduler, ignores, formatting & tests (#1)
Some checks failed
linter / quality (push) Successful in 53s
tests / ci (push) Failing after 5m39s
Kurze Zusammenfassung:

Ergänzt Feature-001-Artefakte: QA-Checkliste, Quickstart, Design-Entscheidung, Scheduler-Dokumentation.
Ergänzt Projekt-ignores: .dockerignore, .eslintignore, .npmignore.
Führte pint aus (Formatierungsfixes).
Fügte/aktualisierte Backend-/Frontend-Skizzen und Tests für den Public Grid Viewer (Reservations, Selection mapping, Payment scaffold, Composite job).
Branch: 001-public-grid-viewer
Wichtige Dateien (Auswahl):

Docs & specs:
qa.md
quickstart.md
001-public-grid-viewer.md
SCHEDULER.md
Config / infra:
pixel_grid.php
.dockerignore, .eslintignore, .npmignore
compose.yaml
Backend (skizzen / implementation):
SchedulerServiceProvider.php
providers.php
ExpireReservations.php
Reservation.php
2026_01_03_000002_create_reservations_table.php
SelectionMapper.php
CompositeImage.php
PaymentController.php
Frontend (scaffold):
Index.vue
GridCanvas.vue
Tests:
PublicGridMetaTest.php
ReserveSelectionTest.php
PriceCalculationTest.php
SelectionMathTest.php
Was ich lokal geprüft habe

pint ausgeführt (Formatierungsfixes angewendet).
Vollständige Test-Suite ausgeführt: 52 passed (164 assertions).
Branch gepusht: cloudarix/001-public-grid-viewer.

Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local>
Reviewed-on: #1
2026-01-03 04:16:45 +00:00
4 changed files with 14 additions and 11 deletions

View File

@ -4,7 +4,7 @@
</div>
</template>
<script setup>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, watch } from 'vue';
const props = defineProps({
@ -23,7 +23,7 @@ const height = 800;
let isPanning = false;
let start = { x: 0, y: 0 };
let offset = { x: 0, y: 0 };
const offset = { x: 0, y: 0 };
let scale = 1;
let pinchActive = false;
let lastDistance = 0;
@ -186,7 +186,7 @@ onMounted(() => {
drawGrid();
});
c.addEventListener('pointerup', (e) => {
c.addEventListener('pointerup', () => {
if (selecting && selection) {
// finalize selection and emit one last time
const relX = selection.x - offset.x;

View File

@ -9,7 +9,9 @@
</aside>
</template>
<script setup>
<script setup lang="ts">
import { computed } from 'vue';
const props = defineProps({
cellCount: { type: Number, default: 0 },
pricePerCell: { type: Number, default: 0 },

View File

@ -14,17 +14,18 @@
</div>
</template>
<script setup>
<script setup lang="ts">
import { ref } from 'vue';
const props = defineProps({ selection: { type: Object, default: null } });
const preview = ref(null);
defineProps({ selection: { type: Object, default: null } });
const preview = ref<string | null>(null);
function onFile(e) {
const file = e.target.files && e.target.files[0];
function onFile(e: Event) {
const input = e.target as HTMLInputElement | null;
const file = input && input.files ? input.files[0] : null;
if (!file) return;
const reader = new FileReader();
reader.onload = (ev) => {
preview.value = ev.target.result;
preview.value = ev.target && (ev.target as FileReader).result as string | null;
};
reader.readAsDataURL(file);
}

View File

@ -19,7 +19,7 @@
</div>
</template>
<script setup>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import GridCanvas from '@/components/GridCanvas.vue';
import SelectionSidebar from '@/components/SelectionSidebar.vue';