|
734 | 734 |
|
735 | 735 | <div class="credentials-form"> |
736 | 736 | <div class="form-field"> |
737 | | - <label for="dbName">Database Name</label> |
| 737 | + <label for="dbName"> |
| 738 | + Database Name |
| 739 | + <span v-if="form.database.mode === 'existing'" class="required">*</span> |
| 740 | + </label> |
738 | 741 | <input |
739 | 742 | id="dbName" |
740 | 743 | v-model="form.database.dbName" |
|
745 | 748 |
|
746 | 749 | <div class="form-row"> |
747 | 750 | <div class="form-field"> |
748 | | - <label for="dbUser">Username</label> |
| 751 | + <label for="dbUser"> |
| 752 | + Username |
| 753 | + <span v-if="form.database.mode === 'existing'" class="required">*</span> |
| 754 | + </label> |
749 | 755 | <input id="dbUser" v-model="form.database.dbUser" type="text" placeholder="app" /> |
750 | 756 | </div> |
751 | 757 |
|
752 | 758 | <div class="form-field"> |
753 | 759 | <label for="dbPassword"> |
754 | 760 | Password |
755 | | - <span v-if="form.database.mode === 'create'" class="required">*</span> |
| 761 | + <span |
| 762 | + v-if="form.database.mode === 'create' || form.database.mode === 'existing'" |
| 763 | + class="required" |
| 764 | + >*</span |
| 765 | + > |
756 | 766 | </label> |
757 | 767 | <input |
758 | 768 | id="dbPassword" |
|
837 | 847 | </div> |
838 | 848 | <div class="preview-item"> |
839 | 849 | <span class="preview-label">Database</span> |
840 | | - <code class="preview-value">{{ |
841 | | - form.database.dbName || |
842 | | - (form.name ? form.name.replace(/-/g, "_") + "_primary_db" : "app_primary_db") |
843 | | - }}</code> |
| 850 | + <code class="preview-value">{{ form.database.dbName || "—" }}</code> |
844 | 851 | </div> |
845 | 852 | <div class="preview-item"> |
846 | 853 | <span class="preview-label">User</span> |
847 | | - <code class="preview-value">{{ |
848 | | - form.database.dbUser || |
849 | | - (form.name ? form.name.replace(/-/g, "_") + "_primary_user" : "app_primary_user") |
850 | | - }}</code> |
| 854 | + <code class="preview-value">{{ form.database.dbUser || "—" }}</code> |
851 | 855 | </div> |
852 | 856 | <div class="preview-item"> |
853 | 857 | <span class="preview-label">Password</span> |
854 | | - <code class="preview-value">{{ |
855 | | - form.database.dbPassword ? "••••••••" : "(auto-generated)" |
856 | | - }}</code> |
| 858 | + <code class="preview-value">{{ form.database.dbPassword ? "••••••••" : "—" }}</code> |
857 | 859 | </div> |
858 | 860 | <div class="preview-hint"> |
859 | 861 | <i class="pi pi-info-circle" /> |
@@ -1662,8 +1664,15 @@ const canProceed = computed(() => { |
1662 | 1664 | if (deploymentMode.value === "easy") { |
1663 | 1665 | if (currentStep.value === 2) { |
1664 | 1666 | if (form.database.type !== "none") { |
1665 | | - if (form.database.mode === "existing" && !form.database.existingContainer) { |
1666 | | - return false; |
| 1667 | + if (form.database.mode === "existing") { |
| 1668 | + if ( |
| 1669 | + !form.database.existingContainer || |
| 1670 | + !form.database.dbName.trim() || |
| 1671 | + !form.database.dbUser.trim() || |
| 1672 | + !form.database.dbPassword.trim() |
| 1673 | + ) { |
| 1674 | + return false; |
| 1675 | + } |
1667 | 1676 | } |
1668 | 1677 | if (form.database.mode === "external") { |
1669 | 1678 | if (!form.database.externalHost.trim() || !form.database.externalPort.trim()) { |
@@ -2377,38 +2386,44 @@ const handleCreate = async () => { |
2377 | 2386 | } |
2378 | 2387 | } |
2379 | 2388 |
|
| 2389 | + const mapDbToPayload = (db: DatabaseFormConfig) => ({ |
| 2390 | + alias: db.alias, |
| 2391 | + type: db.type, |
| 2392 | + mode: db.mode, |
| 2393 | + service: db.service || undefined, |
| 2394 | + existing_container: db.mode === "existing" ? db.existingContainer : undefined, |
| 2395 | + external_host: db.mode === "external" ? db.externalHost : undefined, |
| 2396 | + external_port: |
| 2397 | + (db.mode === "existing" || db.mode === "external") && db.externalPort ? parseInt(db.externalPort) : undefined, |
| 2398 | + database_name: db.dbName || undefined, |
| 2399 | + username: db.dbUser || undefined, |
| 2400 | + password: db.mode === "existing" || db.mode === "external" ? db.dbPassword || undefined : undefined, |
| 2401 | + env_prefix: db.envPrefix || db.alias, |
| 2402 | + }); |
| 2403 | +
|
2380 | 2404 | const databases: Record<string, any>[] = []; |
2381 | 2405 |
|
2382 | 2406 | if (form.database.mode === "existing" && form.database.existingContainer && form.database.type !== "none") { |
2383 | | - databases.push({ |
2384 | | - alias: "primary", |
2385 | | - type: form.database.type, |
2386 | | - mode: "existing", |
2387 | | - existing_container: form.database.existingContainer, |
2388 | | - database_name: form.database.dbName || undefined, |
2389 | | - username: form.database.dbUser || undefined, |
2390 | | - password: form.database.dbPassword || undefined, |
2391 | | - external_port: form.database.externalPort ? parseInt(form.database.externalPort) : undefined, |
2392 | | - }); |
| 2407 | + databases.push( |
| 2408 | + mapDbToPayload({ |
| 2409 | + id: "primary", |
| 2410 | + alias: "primary", |
| 2411 | + type: form.database.type, |
| 2412 | + mode: "existing", |
| 2413 | + service: "", |
| 2414 | + existingContainer: form.database.existingContainer, |
| 2415 | + externalHost: "", |
| 2416 | + externalPort: form.database.externalPort, |
| 2417 | + dbName: form.database.dbName, |
| 2418 | + dbUser: form.database.dbUser, |
| 2419 | + dbPassword: form.database.dbPassword, |
| 2420 | + envPrefix: "", |
| 2421 | + }), |
| 2422 | + ); |
2393 | 2423 | } |
2394 | 2424 |
|
2395 | 2425 | if (advancedOptions.multiDatabase && additionalDatabases.value.length > 0) { |
2396 | | - const extraDbs = additionalDatabases.value |
2397 | | - .filter((db) => db.type !== "none") |
2398 | | - .map((db) => ({ |
2399 | | - alias: db.alias, |
2400 | | - type: db.type, |
2401 | | - mode: db.mode, |
2402 | | - service: db.service || undefined, |
2403 | | - existing_container: db.mode === "existing" ? db.existingContainer : undefined, |
2404 | | - external_host: db.mode === "external" ? db.externalHost : undefined, |
2405 | | - external_port: db.mode === "external" && db.externalPort ? parseInt(db.externalPort) : undefined, |
2406 | | - database_name: db.dbName || undefined, |
2407 | | - username: db.dbUser || undefined, |
2408 | | - password: db.mode === "existing" || db.mode === "external" ? db.dbPassword || undefined : undefined, |
2409 | | - env_prefix: db.envPrefix || db.alias, |
2410 | | - })); |
2411 | | - databases.push(...extraDbs); |
| 2426 | + additionalDatabases.value.filter((db) => db.type !== "none").forEach((db) => databases.push(mapDbToPayload(db))); |
2412 | 2427 | } |
2413 | 2428 |
|
2414 | 2429 | if (databases.length > 0) { |
|
0 commit comments