Exemple #1
0
        public ITable <T> Rename(string newName)
        {
            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}:batchUpdate", this._spreadsheetId);

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                requests = new
                {
                    updateSheetProperties = new
                    {
                        properties = new
                        {
                            sheetId = this._worksheetId,
                            title   = newName
                        },
                        fields = "title"
                    }
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            response
            .Status(HttpStatusCode.OK);

            return(this);
        }
Exemple #2
0
        public List <IRow <T> > GetAll()
        {
            var countFields = Utils.GetFields <T>().Count();

            var fieldIndex = ((char)('A' + countFields)).ToString();

            var range = string.Format("{0}!A2:{1}", this._name, fieldIndex);

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}/values/{1}?fields=values&majorDimension=ROWS", this._spreadsheetId, range);

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            JArray registros = data.values;

            return(registros.Select((a, i) => new Row <T>(
                                        this._connector,
                                        this.DeserializeElement((JArray)a),
                                        this._spreadsheetId,
                                        this._worksheetId,
                                        string.Format("{0}!A{1}:{2}{3}", this._name, i + 1, fieldIndex, i + 1))).ToList() as List <IRow <T> >);
        }
Exemple #3
0
        public IDatabase CreateDatabase(string name)
        {
            var database = this.GetDatabase(name);

            if (database != null)
            {
                throw new Exception("Exists a database with the same name");
            }

            var uri = "https://sheets.googleapis.com/v4/spreadsheets";

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                properties = new
                {
                    title = name
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var spreadsheetId = (string)data.spreadsheetId;

            return(new Database(this._connector, spreadsheetId));
        }
Exemple #4
0
        public void Delete()
        {
            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}:batchUpdate", this._spreadsheetId);

            var request = this._connector.CreateRequest(uri);

            var index = Utils.A1ToRowIndex(this._range);

            var payload = JsonConvert.SerializeObject(new
            {
                requests = new
                {
                    deleteDimension = new
                    {
                        range = new
                        {
                            sheetId    = this._worksheetId,
                            dimension  = "ROWS",
                            startIndex = index - 1,
                            endIndex   = index,
                        }
                    }
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            response
            .Status(HttpStatusCode.OK);
        }
Exemple #5
0
        public ITable <T> GetTable <T>(string name) where T : new()
        {
            var fields = Encode.UrlEncode("sheetId,title");

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}?includeGridData=false&fields=sheets.properties({1})", this._spreadsheetId, fields);

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var sheets = data.sheets;

            if (sheets.Count > 0)
            {
                foreach (var sheet in sheets)
                {
                    if (sheet.properties.title == name)
                    {
                        return(new Table <T>(this._connector, name, this._spreadsheetId, (string)sheet.properties.sheetId));
                    }
                }
            }

            return(null);
        }
Exemple #6
0
        public IDatabasePermission GetPermission(string email)
        {
            var fields = Encode.UrlEncode("emailAddress,id,role,type");

            var uri = string.Format("https://www.googleapis.com/drive/v3/files/{0}/permissions?fields=permissions({1})", this._spreadsheetId, fields);

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var permissions = data.permissions;

            if (permissions.Count > 0)
            {
                foreach (var permission in permissions)
                {
                    if (permission.emailAddress == email)
                    {
                        var role = (Role)System.Enum.Parse(typeof(Role), (string)permission.role, true);
                        var type = (Type)System.Enum.Parse(typeof(Type), (string)permission.type, true);

                        return(new DatabasePermission(this._connector, new Permission((string)permission.emailAddress, role, type), this._spreadsheetId, (string)permission.id));
                    }
                }
            }

            return(null);
        }
Exemple #7
0
        public IRow <T> Add(T record)
        {
            var queryParameters = "insertDataOption=INSERT_ROWS&valueInputOption=USER_ENTERED";

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}/values/{1}:append?{2}", this._spreadsheetId, this._name, queryParameters);

            var request = this._connector.CreateRequest(uri);

            var fields = Utils.GetFields <T>();

            var payload = JsonConvert.SerializeObject(new
            {
                values = new[] {
                    fields.Select(a => a.GetValue(record, null))
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var range = (string)data.updates.updatedRange;

            return(new Row <T>(this._connector, record, this._spreadsheetId, this._worksheetId, range));
        }
Exemple #8
0
        public IRow <T> Update(T record)
        {
            var queryParameters = "valueInputOption=RAW";

            var a1Notation = Utils.A1Notation(this._range);

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}/values/{1}?{2}", this._spreadsheetId, a1Notation, queryParameters);

            var request = this._connector.CreateRequest(uri);

            var fields = Utils.GetFields <T>();

            var payload = JsonConvert.SerializeObject(new
            {
                values = new[] {
                    fields.Select(a => a.GetValue(record, null).ToString())
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Put, payload));

            response
            .Status(HttpStatusCode.OK);

            this.Element = record;

            return(this);
        }
Exemple #9
0
        public void Delete()
        {
            var uri = string.Format("https://www.googleapis.com/drive/v3/files/{0}", this._spreadsheetId);

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Delete));

            response
            .Status(HttpStatusCode.NoContent);
        }
Exemple #10
0
        public ITable <T> CreateTable <T>(string name) where T : new()
        {
            var table = this.GetTable <T>(name);

            if (table != null)
            {
                throw new System.Exception("Exists a table with the same name");
            }

            var field = Encode.UrlEncode("replies.addSheet.properties.sheetId");

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}:batchUpdate?fields={1}", this._spreadsheetId, field);

            var fields = Utils.GetFields <T>();

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                requests = new
                {
                    addSheet = new
                    {
                        properties = new
                        {
                            title          = name,
                            sheetType      = "GRID",
                            gridProperties = new
                            {
                                columnCount    = fields.Count(),
                                frozenRowCount = 1,
                                rowCount       = 2
                            }
                        }
                    }
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var sheetId = (string)data.replies.First.addSheet.properties.sheetId;

            this.AddHeader <T>(sheetId);

            return(new Table <T>(this._connector, name, this._spreadsheetId, sheetId));
        }
Exemple #11
0
        public IEnumerable <IDatabase> GetAllDatabases()
        {
            var uri = string.Format("https://www.googleapis.com/drive/v3/files?q={0}", Encode.UrlEncode(string.Format("mimeType = \"{0}\"", "application/vnd.google-apps.spreadsheet")));

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var documents = data.items;

            foreach (var document in documents)
            {
                yield return(new Database(this._connector, (string)document.id));
            }
        }
Exemple #12
0
        public IDatabase AddPermission(string email, Role role, SheetDB.Enum.Type type)
        {
            var uri = string.Format("https://www.googleapis.com/drive/v3/files/{0}/permissions", this._spreadsheetId);

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                role         = System.Enum.GetName(typeof(SheetDB.Enum.Role), role),
                type         = System.Enum.GetName(typeof(SheetDB.Enum.Type), type),
                emailAddress = email
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            response
            .Status(HttpStatusCode.OK);

            return(this);
        }
Exemple #13
0
        public void Delete()
        {
            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}:batchUpdate", this._spreadsheetId);

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                requests = new
                {
                    deleteSheet = new
                    {
                        sheetId = this._worksheetId
                    }
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            response
            .Status(HttpStatusCode.OK);
        }
Exemple #14
0
        private void AddHeader <T>(string sheetId)
        {
            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}:batchUpdate", this._spreadsheetId);

            var fields = Utils.GetFields <T>();

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                requests = new
                {
                    updateCells = new
                    {
                        start = new
                        {
                            sheetId  = sheetId,
                            rowIndex = 0
                        },
                        rows = new[]
                        {
                            new {
                                values = fields.Select(a => new {
                                    userEnteredValue = new {
                                        stringValue = a.Name.ToLowerInvariant()
                                    }
                                })
                            }
                        },
                        fields = "userEnteredValue.stringValue"
                    }
                }
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Post, payload));

            response
            .Status(HttpStatusCode.OK);
        }
Exemple #15
0
        public IDatabase GetDatabase(string name)
        {
            var uri = string.Format("https://www.googleapis.com/drive/v3/files?q={0}", Encode.UrlEncode(string.Format("name = \"{0}\"", name)));

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var documents = data.files;

            if (documents.Count == 0)
            {
                return(null);
            }

            var spreadsheetId = (string)documents.First.id;

            return(new Database(this._connector, spreadsheetId));
        }
Exemple #16
0
        public IDatabasePermission Update(Role role)
        {
            var fields = Encode.UrlEncode("role");

            var uri = string.Format("https://www.googleapis.com/drive/v3/files/{0}/permissions/{1}?fields={2}", this._spreadsheetId, this._permissionId, fields);

            var request = this._connector.CreateRequest(uri);

            var payload = JsonConvert.SerializeObject(new
            {
                role = System.Enum.GetName(typeof(SheetDB.Enum.Role), role)
            });

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Patch, payload));

            var data = response
                       .Status(HttpStatusCode.OK)
                       .Response.Data <dynamic>();

            this.Permission.Role = (Role)System.Enum.Parse(typeof(Role), (string)data.role, true);

            return(this);
        }
Exemple #17
0
        public IRow <T> GetByIndex(int rowNumber)
        {
            rowNumber = rowNumber + 1;

            var countFields = Utils.GetFields <T>().Count();

            var fieldIndex = ((char)('A' + countFields)).ToString();

            var range = string.Format("{0}!A{1}:{2}{3}", this._name, rowNumber, fieldIndex, rowNumber);

            var uri = string.Format("https://sheets.googleapis.com/v4/spreadsheets/{0}/values/{1}?fields=values&majorDimension=ROWS", this._spreadsheetId, range);

            var request = this._connector.CreateRequest(uri);

            var response = new ResponseValidator(this._connector.Send(request, HttpMethod.Get));

            dynamic data = response
                           .Status(HttpStatusCode.OK)
                           .Response.Data <dynamic>();

            var registro = this.DeserializeElement(data.values.First);

            return(new Row <T>(this._connector, registro, this._spreadsheetId, this._worksheetId, range));
        }