diff --git a/app/Http/Controllers/AssetController.php b/app/Http/Controllers/AssetController.php
index 16adc1b..245f7ec 100644
--- a/app/Http/Controllers/AssetController.php
+++ b/app/Http/Controllers/AssetController.php
@@ -24,6 +24,7 @@ public function current(): JsonResponse
return response()->json([
'asset' => $asset,
+ 'price_tracking_enabled' => $user?->price_tracking_enabled ?? false,
]);
}
diff --git a/app/Http/Controllers/Pricing/PricingController.php b/app/Http/Controllers/Pricing/PricingController.php
index 2a484be..6af8651 100644
--- a/app/Http/Controllers/Pricing/PricingController.php
+++ b/app/Http/Controllers/Pricing/PricingController.php
@@ -36,7 +36,11 @@ public function update(Request $request)
return back()->withErrors(['asset' => 'Please set an asset first.']);
}
- $assetPrice = AssetPrice::updatePrice($user->asset_id, $validated['date'], $validated['price']);
+ AssetPrice::updatePrice($user->asset_id, $validated['date'], $validated['price']);
+
+ if (!$user->price_tracking_enabled) {
+ $user->update(['price_tracking_enabled' => true]);
+ }
return back()->with('success', 'Asset price updated successfully!');
}
diff --git a/app/Models/User.php b/app/Models/User.php
index e8d3f00..eb0dc63 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -26,6 +26,7 @@ class User extends Authenticatable
'email',
'password',
'asset_id',
+ 'price_tracking_enabled',
];
/**
@@ -43,6 +44,7 @@ protected function casts(): array
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
+ 'price_tracking_enabled' => 'boolean',
];
}
diff --git a/database/migrations/0001_01_01_000001_create_users_table.php b/database/migrations/0001_01_01_000001_create_users_table.php
index 9cb9538..4f7f9b6 100644
--- a/database/migrations/0001_01_01_000001_create_users_table.php
+++ b/database/migrations/0001_01_01_000001_create_users_table.php
@@ -18,6 +18,7 @@ public function up(): void
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->foreignId('asset_id')->nullable()->constrained()->onDelete('set null');
+ $table->boolean('price_tracking_enabled')->default(false);
$table->rememberToken();
$table->timestamps();
diff --git a/docker/dev/podman/Dockerfile b/docker/dev/podman/Dockerfile
index a8ba300..f22cb15 100644
--- a/docker/dev/podman/Dockerfile
+++ b/docker/dev/podman/Dockerfile
@@ -22,22 +22,6 @@ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www/html
-# Copy composer files and install PHP dependencies
-COPY composer.json ./
-RUN composer install --no-dev --optimize-autoloader --no-scripts
-
-# Copy package.json and install Node dependencies
-COPY package*.json ./
-RUN npm ci
-
-# Copy application code
-COPY . .
-
-# Set 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 and set up container start script
COPY docker/dev/podman/container-start.sh /usr/local/bin/container-start.sh
RUN chmod +x /usr/local/bin/container-start.sh
diff --git a/docker/dev/podman/container-start.sh b/docker/dev/podman/container-start.sh
index 4cfc0f6..d508480 100644
--- a/docker/dev/podman/container-start.sh
+++ b/docker/dev/podman/container-start.sh
@@ -15,6 +15,10 @@ if ! grep -q "APP_KEY=base64:" /var/www/html/.env; then
sed -i "s/APP_KEY=/APP_KEY=$NEW_KEY/" /var/www/html/.env
fi
+# Install dependencies if needed
+[ ! -f vendor/autoload.php ] && composer install --no-interaction
+[ ! -d node_modules/.bin ] && npm install
+
# Run migrations
php artisan migrate --force
diff --git a/docker/dev/podman/docker-compose.yml b/docker/dev/podman/docker-compose.yml
index e874056..9d61b6f 100644
--- a/docker/dev/podman/docker-compose.yml
+++ b/docker/dev/podman/docker-compose.yml
@@ -21,8 +21,8 @@ services:
- VITE_PORT=5173
volumes:
- ../../../:/var/www/html:Z
- - /var/www/html/node_modules
- - /var/www/html/vendor
+ - app_node_modules:/var/www/html/node_modules
+ - app_vendor:/var/www/html/vendor
ports:
- "8000:8000"
- "5173:5173"
@@ -69,4 +69,6 @@ networks:
volumes:
db_data:
- driver: local
\ No newline at end of file
+ driver: local
+ app_node_modules:
+ app_vendor:
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index b8cf021..69890d5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "site",
+ "name": "html",
"lockfileVersion": 3,
"requires": true,
"packages": {
diff --git a/resources/js/components/Display/StatsBox.tsx b/resources/js/components/Display/StatsBox.tsx
index 29da41e..364174a 100644
--- a/resources/js/components/Display/StatsBox.tsx
+++ b/resources/js/components/Display/StatsBox.tsx
@@ -27,6 +27,7 @@ interface StatsBoxProps {
onAddMilestone?: () => void;
onUpdatePrice?: () => void;
assetSymbol?: string;
+ priceTrackingEnabled?: boolean;
}
export default function StatsBox({
@@ -38,7 +39,8 @@ export default function StatsBox({
onAddPurchase,
onAddMilestone,
onUpdatePrice,
- assetSymbol
+ assetSymbol,
+ priceTrackingEnabled = false,
}: StatsBoxProps) {
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
@@ -78,7 +80,7 @@ export default function StatsBox({
Stats
- {stats.currentPrice && (
+ {priceTrackingEnabled && stats.currentPrice && (
{assetSymbol ?? 'PRICE'}: {formatCurrencyDetailed(stats.currentPrice)}
@@ -119,7 +121,7 @@ export default function StatsBox({
ADD MILESTONE
)}
- {onUpdatePrice && (
+ {priceTrackingEnabled && onUpdatePrice && (