public Guid Post(string recordType, [FromBody] Record record) { IDataSource data = new Postgres(connectionString); DataService service = new DataService(); service.data = data; record.Type = recordType; CreateRecordCommand command = new CreateRecordCommand() { Target = record, }; CreateRecordResult result = (CreateRecordResult)service.Execute(command); return(result.RecordId); }
public void CreateRecordTest() { var request = new CreateRecordRequest(RawRequests.CreateRecord); request.Parse(); var result = new CreateRecordResult() { RecordID = "0", TableID = "0", }; result.Fields.Add("hello0"); result.Fields.Add("hello1"); result.Fields.Add("hello2"); var response = new CreateRecordResponse(request, result); response.Build(); }
public ResultBase Execute(CommandBase command) { data.Open(); ResultBase output = null; switch (command) { case CreateRecordCommand _: { CreateRecordCommand createCommand = (CreateRecordCommand)command; RecordType type = data.GetRecordType(createCommand.Target.Type); List <string> sourceFieldNames = type.Fields.Select(t => t.Name).ToList(); foreach (string field in createCommand.Target.Data.Keys) { if (!sourceFieldNames.Contains(field)) { throw new MissingFieldException($"Record with type {createCommand.Target.Type} doesn't have the column {field}"); } } if (createCommand.Target.Id == Guid.Empty) { createCommand.Target.Id = Guid.NewGuid(); } createCommand.Target["createdon"] = DateTime.Now; createCommand.Target["modifiedon"] = DateTime.Now; Guid result = this.data.CreateRecord(createCommand.Target); output = new CreateRecordResult() { RecordId = result }; break; } case RetrieveRecordCommand _: { RetrieveRecordCommand retrieveCommand = (RetrieveRecordCommand)command; RecordType type = data.GetRecordType(retrieveCommand.Type); List <string> fieldsToGet; if (retrieveCommand.AllFields) { fieldsToGet = EnsureIdColumn(type.FieldNames, retrieveCommand.Type); } else { string badFieldName = retrieveCommand.Fields.FirstOrDefault(f => !type.FieldNames.Contains(f)); if (badFieldName != null) { throw new Exception($"Record Type {retrieveCommand.Type} doesn't contain the field {badFieldName}"); } fieldsToGet = retrieveCommand.Fields; } output = new RetrieveRecordResult() { Result = this.data.RetrieveRecord(retrieveCommand.Type, retrieveCommand.Id, fieldsToGet) }; break; } case CreateRecordTypeCommand _: { CreateRecordTypeCommand createCommand = (CreateRecordTypeCommand)command; createCommand.Target.Fields.Add(new PrimaryField() { Name = createCommand.Target.TableName + "Id" }); createCommand.Target.Fields.Add(new DateTimeField() { Name = "createdon", Nullable = false }); createCommand.Target.Fields.Add(new DateTimeField() { Name = "modifiedon", Nullable = false }); this.data.CreateRecordType(createCommand.Target); output = new CreateRecordTypeResult(); break; } case RetrieveAllCommand _: { RetrieveAllCommand retreiveCommand = (RetrieveAllCommand)command; if (retreiveCommand.Columns == null) { retreiveCommand.Columns = new List <string>(); } BasicQuery query = new BasicQuery() { Columns = EnsureIdColumn(retreiveCommand.Columns, retreiveCommand.RecordType), RecordType = retreiveCommand.RecordType, }; var result = this.data.Query(query); output = new RetrieveAllResult() { Result = result }; break; } case RetrieveRecordTypeCommand _: { RetrieveRecordTypeCommand retrievecommand = (RetrieveRecordTypeCommand)command; var result = this.data.GetRecordType(retrievecommand.RecordType); output = new RetrieveRecordTypeResult() { Type = result }; break; } case DeleteRecordCommand _: { DeleteRecordCommand deleteCommand = (DeleteRecordCommand)command; this.data.DeleteRecord(deleteCommand.Type, deleteCommand.Id); output = new DeleteRecordResult(); break; } case UpdateRecordCommand _: { UpdateRecordCommand updateCommand = (UpdateRecordCommand)command; this.data.UpdateRecord(updateCommand.Target); output = new UpdateRecordResult(); break; } case RetrieveAllRecordTypesCommand _: { var allTypes = this.data.RetrieveAllRecordTypes(); output = new RetrieveAllRecordTypesResult() { RecordTypes = allTypes }; break; } case AddFieldToRecordTypeCommand castedCommand: { this.data.AddFieldToRecordType(castedCommand.RecordType, castedCommand.Field); output = new AddFieldToRecordTypeResult(); } break; case RemoveFieldFromRecordTypeCommand castedCommand: { this.data.RemoveFieldFromRecordType(castedCommand.RecordType, castedCommand.FieldName); output = new RemoveFieldFromRecordTypeResult(); break; } case DeleteRecordTypeCommand castedCommand: { var recordType = this.data.GetRecordType(castedCommand.RecordType); this.data.DeleteRecordType(recordType.RecordTypeId); break; } case QueryRecordsCommand castedCommand: { var query = castedCommand.Query; query.Columns = EnsureIdColumn(query.Columns, query.RecordType); var result = this.data.Query(query); output = new QueryRecordsResult() { Result = result }; break; } default: { throw new Exception("Unknown command"); } } data.Close(); return(output); }
static void Main(string[] args) { IDataSource data = new Postgres("Host=localhost; Port=5432; User Id=reuben; Password=password; Database=recore;"); DataService service = new DataService(); service.data = data; Console.WriteLine(data.CheckInitialized()); if (!data.CheckInitialized()) { data.Initialize(); } RecordType CustomerType = new RecordType("Customer", "customer"); CustomerType.Fields.Add(new TextField() { Name = "name", Length = 50 }); service.Execute(new CreateRecordTypeCommand() { Target = CustomerType }); RecordType logType = new RecordType("Log", "log"); logType.Fields.Add(new TextField() { Name = "name", Length = 50, Nullable = true }); logType.Fields.Add(new NumberField() { Name = "number", Nullable = true }); service.Execute(new CreateRecordTypeCommand() { Target = logType }); Record firstCustomer = new Record() { Type = "customer", Data = new Dictionary <string, object>() { ["name"] = "First customer", } }; CreateRecordResult createResult = (CreateRecordResult)service.Execute(new CreateRecordCommand() { Target = firstCustomer }); Record createdRecord = ((RetrieveRecordResult)service.Execute(new RetrieveRecordCommand() { AllFields = true, Id = createResult.RecordId, Type = "customer" })).Result; foreach (var item in createdRecord.Data) { Console.WriteLine($"{item.Key}:{item.Value}"); } BasicQuery query = new BasicQuery() { RecordType = "customer", Columns = new List <string>() { "name" }, Filters = new List <QueryFilter>() { new QueryFilter() { Column = "name", Operation = FilterOperation.Null }, new QueryFilter() { Column = "name", Operation = FilterOperation.NotNull } }, Orderings = new List <QueryOrdering>() { new QueryOrdering() { Column = "name", Descending = false, } } }; QueryRecordsCommand queryCommand = new QueryRecordsCommand() { Query = query }; var queryResult = (QueryRecordsResult)service.Execute(queryCommand); Console.WriteLine(queryResult.Result.Count); var allTypes = data.GetAllTypes().ToList(); allTypes.Reverse(); foreach (var type in allTypes) { data.DeleteRecordType(type.RecordTypeId); } Console.WriteLine("All done"); Console.ReadLine(); }