ERROR: Failed to install the following Android SDK packages as some licences have not been accepted.
build-tools;27.0.3 Android SDK Build-Tools 27.0.3
To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
Alternatively, to transfer the license agreements from one workstation to another, see d.android.com/r/studio-ui/export-licenses.html
Using Android SDK: C:\Program Files (x86)\Android\android-sdk
Install missing SDK package(s)
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> trainzcity.myftp.org IN ANY +retry=2 +time=5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47344
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;trainzcity.myftp.org. IN ANY
;; ANSWER SECTION:
trainzcity.myftp.org. 59 IN A 176.192.239.59
trainzcity.myftp.org. 1799 IN MX 5 trainzcity.myftp.org.
trainzcity.myftp.org. 1799 IN MX 10 metrocraft.myvnc.com.
trainzcity.myftp.org. 1799 IN MX 15 smtp.trainzcity.myftp.org.
trainzcity.myftp.org. 1799 IN MX 20 pop3.trainzcity.myftp.org.
trainzcity.myftp.org. 1799 IN MX 25 imap.trainzcity.myftp.org.
;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Mar 20 21:54:54 MSK 2020
;; MSG SIZE rcvd: 180
Коммерческое использование Служб
Если вы используете наши Службы от имени своей компании, это означает, что компания принимает данные Условия. Она обязуется защищать компанию Google, ее дочерние структуры, руководство, агентов и сотрудников от любых судебных исков, процессов и разбирательств, связанных с использованием вами Служб или нарушением вами данных Условий, а также от любой ответственности, в том числе финансовой, в отношении исков, ущерба, повреждения, процессов, разбирательств, судебных издержек и гонораров адвокатов.
max_allowed_packet = 16M
key_buffer_size = 16M
max_connections = 64
#region License
// Разработано: Коротенко Владимиром Николаевичем (Vladimir N. Korotenko)
// email: koroten@ya.ru
// skype:vladimir-korotenko
// https://vkorotenko.ru
// Создано: 19.08.2019 20:44
#endregion
using HeIsBad.Code;
using HeIsBad.Models;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
namespace HeIsBad.Controllers
{
/// <summary>
/// Адресный контроллер. Занимается всеми вопросами связанными с адресами, регионами и прочим.
/// </summary>
[Route("api/address")]
[ApiController]
public class AddressController : Controller
{
private static Country[] _countryes = new Country[]
{
new Country{Id = 643,
Alpha2 = "RU",
Alpha3 = "RUS",
Name = "Russia"},
};
private Region[] _regions = RegionsSinglton.Instance.Items;
private City[] _cityes = CityesSinglton.Instance.Items;
/// <summary>
/// Список стран в системе.
/// </summary>
/// <returns></returns>
[HttpGet]
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 86000)]
public IActionResult Get()
{
return Ok(_countryes);
}
/// <summary>
///
/// </summary>
/// <param name="country"></param>
/// <returns></returns>
[HttpGet("{country}")]
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 86000)]
public ActionResult<Country> Get(string country)
{
var res = _countryes.FirstOrDefault(x => x.Alpha2 == country.ToUpper());
if (res == null)
return NotFound(new { error = "Not found country" });
return res;
}
/// <summary>
/// Список регионов для страны.
/// </summary>
/// <param name="country"></param>
/// <returns></returns>
[HttpGet("{country}/regions")]
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 86000)]
public ActionResult GetRegions(string country)
{
var res = _countryes.FirstOrDefault(x => x.Alpha2 == country.ToUpper());
if (res == null)
return NotFound(new { error = "Not found country" });
if (res.Alpha2 == "RU")
return Ok(_regions);
return NoContent();
}
/// <summary>
/// Список городов для страны. Только Россия. Первым идет спецобьект "Вся Россия", потом Москва и Санк-Петербург, дальше сортировка по коду.
/// </summary>
/// <param name="country">Код страны, ru</param>
/// <param name="query">Поисковая фраза, по умолчанию все</param>
/// <param name="limit">Лимит для запроса</param>
/// <returns></returns>
[HttpGet("{country}/cityes")]
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 86000)]
public ActionResult GetCityes(string country, [FromQuery]string query = "", [FromQuery]int limit = 10)
{
var res = _countryes.FirstOrDefault(x => x.Alpha2 == country.ToUpper());
if (res == null)
return NotFound(new { error = "Not found country" });
if (res.Alpha2 == "RU")
{
return Ok(GetFilteredCityList(query, limit));
}
return NoContent();
}
/// <summary>
/// Отдает лимитированное количество городов.
/// </summary>
/// <param name="query">Если строка не пустая то применяется фильтр</param>
/// <param name="limit"></param>
/// <returns></returns>
private City[] GetFilteredCityList(string query, int limit)
{
if (string.IsNullOrEmpty(query))
return _cityes.Take(limit).ToArray();
query = query.ToLower();
return _cityes.Where(x => x.Name.ToLower().Contains(query) || x.Slug.ToLower().Contains(query))
.Take(limit)
.ToArray();
}
}
}
#region License
// Разработано: Коротенко Владимиром Николаевичем (Vladimir N. Korotenko)
// email: koroten@ya.ru
// skype:vladimir-korotenko
// https://vkorotenko.ru
// Создано: 19.08.2019 14:38
#endregion
using Newtonsoft.Json;
using System;
namespace HeIsBad.Models
{
/// <summary>
/// Город
/// </summary>
public class City
{
/// <summary>
/// Идентификатор
/// </summary>
public int Id { get; set; }
/// <summary>
/// Регион к которому принадлежит город
/// </summary>
public int RegionId { get; set; }
/// <summary>
/// Имя города
/// </summary>
public string Name { get; set; }
/// <summary>
/// Longitude
/// </summary>
public long Lon { get; set; }
/// <summary>
/// Lattitude
/// </summary>
public long Lat { get; set; }
/// <summary>
/// Название для ЧПУ
/// </summary>
public string Slug { get; set; }
/// <summary>
/// Префикс образования, например район или область
/// </summary>
public string Prefix { get; set; }
/// <summary>
/// Идентификатор
/// </summary>
[JsonIgnore]
public Guid Guid { get; set; }
/// <summary>
/// Вышестоящий обьект, используется для вывода иерархии
/// </summary>
public string Parent { get; set; }
}
}
Давайте по пунктам:
1. подключения к БД - в гите должен быть сэмпловый файл, система развертывания на основе него строит строки подключения для тестов, прода или стейджа, либо не строит а берет вообще из переменных среды. Рекомендаций вообще куча по хранению как секретов, так и строк подключения.
2. Все что загружается пользователями - это бэкапится скриптами вместе с БД, максимум что вам нужно закинуть в гит эти примеры наполнения.
3. Насчет папки - из своего опыта, обыкновенная папка, в гите, туда и заливаются изображения, библиотеки, что то еще. В общем не красиво, но удобно, можно увидеть что там изменилось. Возможно что создать рядом репозиторий Project-data где и будут храниться эти статические файлы. Что бы не таскать каждый раз большой объем.