forked from ddrilling/AsbCloudServer
Merge pull request 'Контакты/Добавить метод для переноса нескольких контактов' (#294) from feature/#36049589-copy-contacts-from-well-to-well into dev
Reviewed-on: https://test.digitaldrilling.ru:8443/DDrilling/AsbCloudServer/pulls/294
This commit is contained in:
commit
2f5dfaae36
@ -60,5 +60,15 @@ namespace AsbCloudApp.Services
|
|||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<int> DeleteAsync(int idWell, int id, CancellationToken token);
|
Task<int> DeleteAsync(int idWell, int id, CancellationToken token);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Скопировать контакты в другую скважину
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="idWell">ключ скважины, откуда копировать контакты</param>
|
||||||
|
/// <param name="idWellTarget">ключ скважины, куда копировать контакты</param>
|
||||||
|
/// <param name="contactIds"></param>
|
||||||
|
/// <param name="token"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<int> CopyAsync(int idWell, int idWellTarget, IEnumerable<int> contactIds, CancellationToken token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,6 +90,26 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
return await db.SaveChangesAsync(token);
|
return await db.SaveChangesAsync(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<int> CopyAsync(int idWell, int idWellTarget, IEnumerable<int> contactIds, CancellationToken token)
|
||||||
|
{
|
||||||
|
var contacts = await GetContacts(idWell, contactIds, token);
|
||||||
|
if (!contacts.Any())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
var newContacts = contacts.Select(contact =>
|
||||||
|
{
|
||||||
|
var newContact = contact.Adapt<Contact>();
|
||||||
|
newContact.IdWell = idWellTarget;
|
||||||
|
newContact.Id = default;
|
||||||
|
|
||||||
|
return newContact;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.Contacts.AddRange(newContacts);
|
||||||
|
|
||||||
|
return await db.SaveChangesAsync(token);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<Contact?> GetContact(int idWell, int idContact, CancellationToken token)
|
private async Task<Contact?> GetContact(int idWell, int idContact, CancellationToken token)
|
||||||
{
|
{
|
||||||
var contact = await db.Contacts
|
var contact = await db.Contacts
|
||||||
@ -100,5 +120,16 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
return contact;
|
return contact;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<Contact[]> GetContacts(int idWell, IEnumerable<int> contactIds, CancellationToken token)
|
||||||
|
{
|
||||||
|
var contacts = await db.Contacts
|
||||||
|
.Where(c => c.IdWell == idWell)
|
||||||
|
.Where(c => contactIds.Contains(c.Id))
|
||||||
|
.AsNoTracking()
|
||||||
|
.ToArrayAsync(token);
|
||||||
|
|
||||||
|
return contacts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,6 +139,34 @@ namespace AsbCloudWebApi.Controllers
|
|||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Скопировать контакты в другую скважину
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="idWell">ключ скважины, откуда копировать контакты</param>
|
||||||
|
/// <param name="idWellTarget">ключ скважины, куда копировать контакты</param>
|
||||||
|
/// <param name="contactIds"></param>
|
||||||
|
/// <param name="token"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("copy/{idWellTarget}")]
|
||||||
|
[Permission]
|
||||||
|
[ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)]
|
||||||
|
public async Task<IActionResult> CopyAsync(
|
||||||
|
int idWell,
|
||||||
|
int idWellTarget,
|
||||||
|
[FromBody] IEnumerable<int> contactIds,
|
||||||
|
CancellationToken token)
|
||||||
|
{
|
||||||
|
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
||||||
|
return Forbid();
|
||||||
|
|
||||||
|
if (!await CanUserAccessToWellAsync(idWellTarget, token).ConfigureAwait(false))
|
||||||
|
return Forbid();
|
||||||
|
|
||||||
|
var result = await wellContactsRepository.CopyAsync(idWell, idWellTarget, contactIds, token);
|
||||||
|
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<bool> CanUserAccessToWellAsync(int idWell, CancellationToken token)
|
private async Task<bool> CanUserAccessToWellAsync(int idWell, CancellationToken token)
|
||||||
{
|
{
|
||||||
int? idCompany = User.GetCompanyId();
|
int? idCompany = User.GetCompanyId();
|
||||||
|
Loading…
Reference in New Issue
Block a user