Compare commits

..

No commits in common. "d7e70a37e5e39ccfe728abb8bfdcfca3c0c736a1" and "ddaefdc57dd217adbcedad08b7a5ff40cc92e456" have entirely different histories.

364 changed files with 555 additions and 2565 deletions

View File

@ -1,32 +1,74 @@
# Dependencies
node_modules/
vendor/
# ========================================
# Docker Ignore File
# ========================================
# Build artifacts
/public/build
/public/hot
/public/storage
/storage/*.key
# Git
.git
.gitignore
.gitattributes
# Environment files
.env
.env.backup
.env.production
# Documentation
README.md
CHANGELOG.md
Documentation/
*.md
# IDE files
# Tests
tests/
phpunit.xml
.phpunit.cache
.phpunit.result.cache
# IDE & Editors
.vscode/
.idea/
.fleet/
.nova/
.zed/
*.swp
*.swo
# OS generated files
*~
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.phpactor.json
# Docker files (tidak perlu di-copy ke image)
Dockerfile
docker-compose*.yml
.dockerignore
# Environment files (akan di-set via environment variables)
.env
.env.*
!.env.example
# Dependencies (akan di-install via composer & npm)
/vendor/
/node_modules/
# Build artifacts (akan di-build di stage terpisah)
/public/hot
/public/build
# Storage & Cache (akan di-mount sebagai volume)
/storage/*.key
/storage/logs/*
/storage/framework/cache/*
/storage/framework/sessions/*
/storage/framework/views/*
/storage/pail
# Generated files
/public/storage
/bootstrap/cache/*
# Local development files
Homestead.json
Homestead.yaml
auth.json
.vagrant
.phpstorm.meta.php
_ide_helper.php
# Logs
*.log
@ -34,86 +76,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Coverage directory used by tools like istanbul
coverage/
# nyc test coverage
.nyc_output
# Dependency directories
jspm_packages/
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Laravel specific
/bootstrap/cache/*.php
/storage/app/*
!/storage/app/.gitignore
/storage/framework/cache/*
!/storage/framework/cache/.gitignore
/storage/framework/sessions/*
!/storage/framework/sessions/.gitignore
/storage/framework/testing/*
!/storage/framework/testing/.gitignore
/storage/framework/views/*
!/storage/framework/views/.gitignore
/storage/logs/*
!/storage/logs/.gitignore
# Testing
/coverage
/.phpunit.result.cache
/phpunit.xml
# Backup files
*.bak
*.backup
*.sql
# Documentation
README.md
Documentation/
# OS Files
.DS_Store
Thumbs.db
desktop.ini

View File

@ -1,65 +1,86 @@
APP_NAME=Abbauf-Kasir
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
# ========================================
# Abbauf Kasir - Docker Environment Configuration
# ========================================
# Copy file ini ke .env sebelum deployment
# Ganti semua placeholder dengan nilai yang sesuai
APP_LOCALE=en
# Application
APP_NAME=Abbauf-Kasir
APP_ENV=production
APP_KEY= # Generate dengan: php artisan key:generate
APP_DEBUG=false
APP_URL=http://localhost # Ganti dengan domain production
APP_LOCALE=id
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_FAKER_LOCALE=id_ID
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
PHP_CLI_SERVER_WORKERS=4
BCRYPT_ROUNDS=12
# Logging
LOG_CHANNEL=stack
LOG_STACK=single
LOG_STACK=daily
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
LOG_LEVEL=error
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
# Database Configuration
DB_CONNECTION=mysql
DB_HOST=mysql # Nama service di docker-compose
DB_PORT=3306
DB_DATABASE=kasir_db # Nama database
DB_USERNAME=kasir_user # Username database
DB_PASSWORD=strong_password_here # GANTI dengan password kuat!
SESSION_DRIVER=database
# MySQL Root Password (untuk docker-compose)
MYSQL_ROOT_PASSWORD=root_strong_password # GANTI dengan password root yang kuat!
# Cache & Session
CACHE_STORE=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
CACHE_STORE=database
# CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
# Redis Configuration
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
# Queue
QUEUE_CONNECTION=redis
# Broadcasting
BROADCAST_CONNECTION=log
# Filesystem
FILESYSTEM_DISK=local
# Mail Configuration (opsional)
MAIL_MAILER=log
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_ADDRESS="noreply@abbauf-kasir.local"
MAIL_FROM_NAME="${APP_NAME}"
# AWS (jika menggunakan S3 untuk storage)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
# Ports (untuk docker-compose)
APP_PORT=80 # Port untuk akses aplikasi
# DB_PORT=3306 # Uncomment jika ingin expose DB port
# REDIS_PORT=6379 # Uncomment jika ingin expose Redis port
# Vite
VITE_APP_NAME="${APP_NAME}"

5
.gitignore vendored
View File

@ -24,5 +24,6 @@ Homestead.yaml
Thumbs.db
# Docker - Database Backups (exclude backups from git)
/docker
deploy-kasir.sh
/docker/mysql/backups/*.sql
/docker/mysql/backups/*.sql.gz
!/docker/mysql/backups/README.md

View File

@ -1,57 +1,91 @@
# Use PHP 8.2 with Apache
FROM php:8.2-apache
# ========================================
# Stage 1: Build Frontend Assets (Vue.js)
# ========================================
FROM node:20-alpine as node_builder
WORKDIR /app
# Copy package files untuk caching layer
COPY package*.json ./
# Install dependencies
RUN npm ci --legacy-peer-deps
# Copy seluruh source code
COPY . .
# Build production assets
RUN npm run build
# ========================================
# Stage 2: Laravel Application
# ========================================
FROM php:8.3-fpm-alpine
# Install system dependencies dan PHP extensions
RUN apk update && apk add --no-cache \
git \
unzip \
libzip-dev \
libpng-dev \
oniguruma-dev \
libxml2-dev \
curl \
mysql-client \
autoconf \
g++ \
make \
&& docker-php-ext-install \
pdo_mysql \
zip \
gd \
mbstring \
exif \
pcntl \
bcmath \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& apk del autoconf g++ make \
&& rm -rf /var/cache/apk/* /tmp/*
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www/html
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
nodejs \
npm \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# Install Redis extension
RUN pecl install redis && docker-php-ext-enable redis
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Enable Apache mod_rewrite
RUN a2enmod rewrite
# Copy Apache configuration
COPY docker/apache/000-default.conf /etc/apache2/sites-available/000-default.conf
# Copy application files
COPY . /var/www/html
# Set proper permissions
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache
# Copy composer files untuk caching layer
COPY composer.json composer.lock ./
# Install PHP dependencies
RUN composer install --no-dev --optimize-autoloader
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
# Install Node.js dependencies and build assets
RUN npm install && npm run build
# Copy application source code
COPY . .
# Create .env file if it doesn't exist
RUN if [ ! -f .env ]; then cp .env.example .env; fi
# Copy hasil build Vue dari stage 1
COPY --from=node_builder /app/public/build /var/www/html/public/build
# Generate application key
RUN php artisan key:generate
# Generate autoload files dengan optimasi
RUN composer dump-autoload --optimize --classmap-authoritative
# Expose port 80
EXPOSE 80
# Create required directories dan set permissions
RUN mkdir -p \
storage/framework/cache \
storage/framework/sessions \
storage/framework/views \
storage/logs \
bootstrap/cache \
&& chown -R www-data:www-data \
/var/www/html/storage \
/var/www/html/bootstrap/cache \
&& chmod -R 775 \
/var/www/html/storage \
/var/www/html/bootstrap/cache
# Start Apache
CMD ["apache2-foreground"]
# Switch ke user non-root untuk keamanan
USER www-data
EXPOSE 9000
CMD ["php-fpm"]

View File

@ -145,7 +145,7 @@ docker exec -it abbauf_kasir_app php artisan migrate --seed
docker exec -it abbauf_kasir_app php artisan storage:link
# Atau import database secara manual
docker exec -i abbauf_kasir_db mysql -u kasir_user -pkasir_password kasir_db < ./storage/toko_emas.sql
docker exec -i abbauf_kasir_db mysql -u kasir_user -pkasir_password kasir_db < ./toko_emas.sql
# Periksa database (opsional)
docker exec -it abbauf_kasir_db bash

View File

@ -18,7 +18,7 @@ class AuthController extends Controller
]);
// cari user berdasarkan nama
$user = User::whereRaw('BINARY nama = ?', [$request->nama])->first();
$user = User::where('nama', $request->nama)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json([

View File

@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use App\Models\Item;
use App\Models\Nampan;
use Illuminate\Http\Request;
class ItemController extends Controller
@ -67,20 +66,13 @@ class ItemController extends Controller
{
$validated = $request->validate([
'id_produk' => 'required|exists:produks,id',
'id_nampan' => 'required',
'id_nampan' => 'nullable|exists:nampans,id'
],[
'id_produk' => 'Id produk tidak valid.',
'id_nampan' => 'Id nampan tidak valid'
]);
if ($validated['id_nampan'] == 0) {
$item = Item::findOrFail($id)->update([
'id_produk' => $validated['id_produk'],
'id_nampan' => null
]);
} else {
$item = Item::findOrFail($id)->update($validated);
}
$item = Item::findOrFail($id)->update($validated);
return response()->json([
'message' => 'Item berhasil diubah',

0
bootstrap/cache/.gitignore vendored Executable file → Normal file
View File

View File

@ -1,79 +1,176 @@
version: '3.8'
services:
app:
# ========================================
# Laravel PHP-FPM Application
# ========================================
laravel:
build:
context: .
dockerfile: Dockerfile
container_name: kasir-app
container_name: abbauf_kasir_app
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./:/var/www/html
- ./docker/mysql/backups:/var/www/html/docker/mysql/backups
ports:
- "8000:80"
# Mount storage untuk uploads dan logs (persistent)
- ./storage:/var/www/html/storage
# Mount public build assets (read-only)
- ./public/build:/var/www/html/public/build:ro
environment:
- APP_ENV=local
- APP_DEBUG=true
- DB_HOST=mysql
- DB_PORT=3306
- DB_DATABASE=kasir_db
- DB_USERNAME=kasir_user
- DB_PASSWORD=kasir_password
- REDIS_HOST=redis
- REDIS_PORT=6379
depends_on:
- mysql
- redis
# Application
APP_NAME: ${APP_NAME:-Abbauf-Kasir}
APP_ENV: ${APP_ENV:-production}
APP_KEY: ${APP_KEY}
APP_DEBUG: ${APP_DEBUG:-false}
APP_URL: ${APP_URL:-http://localhost}
# Database
DB_CONNECTION: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-kasir_db}
DB_USERNAME: ${DB_USERNAME:-kasir_user}
DB_PASSWORD: ${DB_PASSWORD}
# Cache & Session
CACHE_STORE: redis
SESSION_DRIVER: redis
REDIS_HOST: redis
REDIS_PORT: 6379
# Queue
QUEUE_CONNECTION: redis
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started
networks:
- kasir_network
healthcheck:
test: ["CMD", "php-fpm", "-t"]
interval: 30s
timeout: 10s
retries: 3
# ========================================
# Nginx Web Server
# ========================================
nginx:
image: nginx:alpine
container_name: abbauf_kasir_nginx
restart: unless-stopped
ports:
- "${APP_PORT:-80}:80"
volumes:
# Nginx configuration
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
# Laravel public directory (untuk static assets)
- ./public:/var/www/html/public:ro
# Storage symlink untuk file uploads
- ./storage/app/public:/var/www/html/public/storage:ro
depends_on:
- laravel
networks:
- kasir_network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
# ========================================
# MySQL Database
# ========================================
mysql:
image: mysql:5.7
container_name: kasir-mysql
image: mysql:8.4
container_name: abbauf_kasir_db
restart: unless-stopped
environment:
MYSQL_DATABASE: kasir_db
MYSQL_ROOT_PASSWORD: kasir_password
MYSQL_USER: kasir_user
MYSQL_PASSWORD: kasir_password
volumes:
- ./docker/mysql/mysql_data:/var/lib/mysql
- ./docker/mysql/backups:/backups
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
MYSQL_DATABASE: ${DB_DATABASE:-kasir_db}
MYSQL_USER: ${DB_USERNAME:-kasir_user}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
ports:
- "3308:3306"
- "${DB_PORT:-3306}:3306"
volumes:
- mysql_data:/var/lib/mysql
# Optional: backup folder
- ./docker/mysql/backups:/backups
networks:
- kasir_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root_secret_password}"]
interval: 10s
timeout: 5s
retries: 5
# command: --default-authentication-plugin=mysql_native_password
# ========================================
# Redis Cache & Session Store
# ========================================
redis:
image: redis:7-alpine
container_name: kasir-redis
container_name: abbauf_kasir_redis
restart: unless-stopped
ports:
- "6380:6379"
- "${REDIS_PORT:-6379}:6379"
volumes:
- ./docker/redis/redis_data:/data
- redis_data:/data
networks:
- kasir_network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
command: redis-server --appendonly yes
# phpmyadmin:
# image: phpmyadmin/phpmyadmin
# container_name: kasir-phpmyadmin
# restart: unless-stopped
# environment:
# PMA_HOST: mysql
# PMA_PORT: 3306
# PMA_USER: ${DB_USERNAME}
# PMA_PASSWORD: ${DB_PASSWORD}
# ports:
# - "8080:80"
# depends_on:
# - mysql
# networks:
# - kasir-network
# volumes:
# mysql_data:
# driver: local
# redis_data:
# driver: local
# ========================================
# Queue Worker (Optional - untuk background jobs)
# ========================================
queue:
build:
context: .
dockerfile: Dockerfile
container_name: abbauf_kasir_queue
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./storage:/var/www/html/storage
environment:
APP_ENV: ${APP_ENV:-production}
APP_KEY: ${APP_KEY}
DB_CONNECTION: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-kasir_db}
DB_USERNAME: ${DB_USERNAME:-kasir_user}
DB_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: redis
QUEUE_CONNECTION: redis
depends_on:
- laravel
- redis
- mysql
networks:
- kasir_network
command: php artisan queue:work --tries=3 --timeout=90
# ========================================
# Networks
# ========================================
networks:
default:
external: true
name: kasir_kasir_network
kasir_network:
driver: bridge
# ========================================
# Persistent Volumes
# ========================================
volumes:
mysql_data:
driver: local
redis_data:
driver: local

View File

@ -1,12 +0,0 @@
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

View File

@ -1,2 +0,0 @@
[auto]
server-uuid=79710a58-aeaa-11f0-a626-0242ac150002

Binary file not shown.

Binary file not shown.

View File

@ -1,135 +0,0 @@
10,69
10,29
10,93
10,2
10,3
11,13
11,4
11,8
11,17
11,15
11,16
11,7
11,2
11,3
9,5
9,2
9,3
8,7
8,5
8,2
8,3
0,457
12,2
12,1
12,3
20,2
20,1
20,3
19,2
19,1
19,3
18,1
18,3
14,1
11,28
11,27
11,26
14,5
11,25
11,24
14,3
13,1
11,23
11,22
13,3
11,21
11,20
11,1
11,19
10,303
10,302
10,301
10,300
10,299
10,298
10,297
10,296
2,2
10,295
2,1
10,294
10,293
10,292
2,3
10,291
10,290
10,289
10,288
10,287
10,286
10,285
10,284
10,283
10,282
10,281
10,280
10,279
10,278
10,277
10,276
10,275
10,274
10,273
10,272
10,271
10,270
10,269
10,268
10,267
10,266
10,265
10,264
10,263
10,262
10,261
10,260
10,259
10,258
10,257
10,256
10,255
10,254
10,253
10,252
10,251
10,250
10,249
10,248
10,247
10,246
10,245
10,244
10,243
10,242
10,241
10,240
10,239
10,238
10,237
10,236
10,235
10,234
10,233
10,232
10,231
10,230
10,229
10,228
10,227
10,226
10,225
10,224
10,223
10,222
10,221

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
default-character-set=latin1
default-collation=latin1_swedish_ci

View File

@ -1 +0,0 @@
/var/run/mysqld/mysqld.sock

View File

@ -1 +0,0 @@
ÿlocalhost performance_schema mysql.session ÿlocalhost sys mysql.sys ÿ% kasir\_db kasir_user 

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
default-character-set=latin1
default-collation=latin1_swedish_ci

Some files were not shown because too many files have changed in this diff Show More