コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }