@@ -92,7 +92,7 @@ func CreateDatabase(name string) error {
9292 return err
9393 }
9494
95- groups , err := client . Groups . List ( )
95+ groups , err := listGroups ( client )
9696 if err != nil {
9797 return err
9898 }
@@ -127,7 +127,7 @@ func CreateDatabase(name string) error {
127127 spinner := prompt .Spinner (fmt .Sprintf ("Creating database %s in group %s..." , internal .Emph (name ), internal .Emph (groupName )))
128128 defer spinner .Stop ()
129129
130- if _ , err = client . Databases . Create ( name , location , "" , "" , groupName , schemaFlag , typeFlag == "schema" , seed , sizeLimitFlag , remoteEncryptionCipherFlag , remoteEncryptionKeyFlag (), tursoDBFlag , spinner ); err != nil {
130+ if err := createDatabase ( client , name , location , groupName , seed , spinner ); err != nil {
131131 return fmt .Errorf ("could not create database %s: %w" , name , err )
132132 }
133133
@@ -145,6 +145,78 @@ func CreateDatabase(name string) error {
145145 return nil
146146}
147147
148+ func createDatabase (client * turso.Client , name , location , groupName string , seed * turso.DBSeed , spinner * prompt.SpinnerT ) error {
149+ if ! flags .V3Api () {
150+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
151+ }
152+ if schemaFlag != "" || typeFlag == "schema" {
153+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
154+ }
155+ if sizeLimitFlag != "" {
156+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
157+ }
158+ if seed != nil && seed .Type != "database" && seed .Type != "upload" {
159+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
160+ }
161+ orgID , err := tryResolveOrgID (client )
162+ if err != nil {
163+ return err
164+ }
165+ if orgID == "" {
166+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
167+ }
168+ body := CreateDatabaseV3BodyFromFlags (name , seed )
169+ if seed == nil || seed .Type != "database" {
170+ groupID , err := tryResolveGroupID (client , groupName )
171+ if err != nil {
172+ return err
173+ }
174+ if groupID == "" {
175+ return createDatabaseV2 (client , name , location , groupName , seed , spinner )
176+ }
177+ body .GroupID = groupID
178+ } else if seed .Type == "database" {
179+ _ , err := client .DatabasesV3 .Create (orgID , body )
180+ return err
181+ }
182+ _ , err = client .DatabasesV3 .Create (orgID , body )
183+ return err
184+ }
185+
186+ func createDatabaseV2 (client * turso.Client , name , location , groupName string , seed * turso.DBSeed , spinner * prompt.SpinnerT ) error {
187+ _ , err := client .Databases .Create (name , location , "" , "" , groupName , schemaFlag , typeFlag == "schema" , seed , sizeLimitFlag , remoteEncryptionCipherFlag , remoteEncryptionKeyFlag (), tursoDBFlag , spinner )
188+ return err
189+ }
190+
191+ func CreateDatabaseV3BodyFromFlags (name string , seed * turso.DBSeed ) turso.CreateDatabaseV3Body {
192+ body := turso.CreateDatabaseV3Body {
193+ Name : name ,
194+ CreationMode : "empty" ,
195+ }
196+ if tursoDBFlag {
197+ body .DatabaseType = "tursodb"
198+ } else {
199+ body .DatabaseType = "libsql"
200+ }
201+ if seed != nil && seed .Type == "database" {
202+ body .CreationMode = "fork"
203+ body .ParentDBName = seed .Name
204+ if seed .Timestamp != nil {
205+ body .Timestamp = seed .Timestamp
206+ }
207+ }
208+ if seed != nil && seed .Type == "upload" {
209+ body .CreationMode = "upload"
210+ }
211+ if remoteEncryptionKeyFlag () != "" {
212+ body .RemoteEncryption = & turso.RemoteEncryption {
213+ EncryptionKey : remoteEncryptionKeyFlag (),
214+ EncryptionCipher : remoteEncryptionCipherFlag ,
215+ }
216+ }
217+ return body
218+ }
219+
148220func ensureGroup (client * turso.Client , group string , groups []turso.Group , location , version string ) error {
149221 if ! shouldAutoCreateGroup (group , groups ) {
150222 return nil
0 commit comments